from django.db import models
from django.core.exceptions import ValidationError
from django.core import validators
from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _

from apps.core.models.common import ConfigCommonModel


class StaticSettings(ConfigCommonModel):
    STATIC_CHOICES = (
        (True, _('是')),  # 翻译选项
        (False, _('否')),
    )

    static_key = models.BooleanField(
        verbose_name=_('是否生成静态'),  # 翻译字段标签
        choices=STATIC_CHOICES,
        default=True,
        help_text=_(
            '当缓存时间与静态都开启时，注意二者各自的时间控制。如果已经生成静态后，感觉不需要缓存可以将对应的缓存设置为0')  # 翻译帮助文本
    )

    static_dir = models.CharField(verbose_name=_('静态路径'),
                                  max_length=20,
                                  help_text=_('系统保存文件的路径。'),
                                  default='html',
                                  blank=False)

    high_safe = models.PositiveIntegerField(
        verbose_name=_('高频保护'),
        default=0,
        help_text=mark_safe(
            _('''  # 对HTML内容也进行翻译
                            <div class="alert alert-secondary" style="max-width:500px;">
                            我们设置以内存缓存做高频保护。高频保护在内存当中生成一个短时间的缓存。<br>当访客进入时，直接从内存当中读取页面，减少IO开销。当页面被访问时，我们就生成这个缓存，在高频浏览时，这个缓存就可以在短时间内大大的减轻服务器的压力，在过时后，如果还有访问则继续自动建立。<br>
                            如果有缓存设置，则以缓存设置缓存方式进行缓存，如果没有则以我们默认的缓存进行缓存。缓存页面的过期时间不益过长，否则就和全局缓存起同样的作用了。如果需要全站缓存，请进入缓存设置启动。<br>
                            <strong>值为0时不启动</strong>
                            <p><strong>时间单位换算：</strong></p>
                            <dl>
                                <dd>1分钟 = 60秒</dd>
                                <dd>1小时 = 3600秒</dd>
                                <dd>1天 = 86400秒</dd>
                            </dl>
                            </div>
                            ''')),
        validators=[validators.MinValueValidator(0)])

    static_index = models.PositiveIntegerField(
        verbose_name=_('首页静态过期时间'),
        default=3600,
        help_text=_('单位（秒）,当值为"999"时为永不过期。'),
        validators=[validators.MinValueValidator(0)])

    static_node = models.PositiveIntegerField(
        verbose_name=_('频道页静态过期时间'),
        default=3600,
        help_text=_('单位（秒）,当值为"999"时为永不过期。'),
        validators=[validators.MinValueValidator(0)])

    static_list = models.PositiveIntegerField(
        verbose_name=_('列表页静态过期时间'),
        default=3600,
        help_text=_('单位（秒）,当值为"999"时为永不过期。（暂未使用）'),
        validators=[validators.MinValueValidator(0)])

    static_tag = models.PositiveIntegerField(
        verbose_name=_('标签页/日期归档页静态过期时间'),
        default=86400,
        help_text=_('单位（秒）,当值为"999"时为永不过期。'),
        validators=[validators.MinValueValidator(0)])

    static_item = models.PositiveIntegerField(
        verbose_name=_('内容页静态过期时间'),
        default=86400,
        help_text=_('单位（秒）,当值为"999"时为永不过期。'),
        validators=[validators.MinValueValidator(0)])

    def __str__(self):
        return str(_("静态设置"))  # 修复__str__方法

    class Meta:
        verbose_name = _("静态设置")  # 翻译单数名称
        verbose_name_plural = _("静态设置")  # 翻译复数名称
