from datetime import timedelta

from django.conf import settings
from django.db import models

from core.utils import CachedSingleton


@CachedSingleton("global_settings")
class GlobalSettings(models.Model):
    yuan_rate = models.DecimalField('Курс CNY/RUB', max_digits=10, decimal_places=2, default=0)
    yuan_rate_last_updated = models.DateTimeField('Дата обновления курса CNY/RUB', null=True, default=None)
    yuan_rate_commission = models.DecimalField('Наценка на курс юаня, руб', max_digits=10, decimal_places=2, default=0)
    delivery_price_CN = models.DecimalField('Цена доставки по Китаю', max_digits=10, decimal_places=2, default=0)
    commission_rub = models.DecimalField('Комиссия, руб', max_digits=10, decimal_places=2, default=0)
    pickup_address = models.CharField('Адрес пункта самовывоза', max_length=200, blank=True, null=True)
    time_to_buy = models.DurationField('Время на покупку',
                                       help_text="Через N времени заказ переходит из статуса 'Новый' в 'Черновик'",
                                       default=timedelta(hours=3))

    class Meta:
        verbose_name = 'Глобальные настройки'
        verbose_name_plural = 'Глобальные настройки'

    def __str__(self) -> str:
        return f'GlobalSettings <{self.id}>'

    @property
    def full_yuan_rate(self):
        return self.yuan_rate + self.yuan_rate_commission


DEFAULT_CONFIG = settings.BONUS_PROGRAM_DEFAULT_CONFIG


@CachedSingleton("bonus_config")
class BonusProgramConfig(models.Model):
    amount_signup = models.PositiveSmallIntegerField(
        'Бонус за регистрацию', default=DEFAULT_CONFIG['amounts']['signup'])
    amount_referral = models.PositiveSmallIntegerField(
        'Реферальный бонус', default=DEFAULT_CONFIG['amounts']['referral'])

    class Meta:
        verbose_name = 'Настройки бонусной программы'
        verbose_name_plural = 'Настройки бонусной программы'
