from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator
from .common import ConfigCommonModel
from django.utils.translation import gettext_lazy as _  # 添加导入
from django.utils.safestring import mark_safe


class ContentConfig(ConfigCommonModel):
    """
    内容扩展配置（单例模式）
    """
    # 使用gettext_lazy翻译选项文本
    STATIC_CHOICES = (
        (True, _('是')),
        (False, _('否')),
    )

    auto_summary = models.BooleanField(verbose_name=_('自动简介'),
                                       choices=STATIC_CHOICES,
                                       default=True,
                                       help_text=mark_safe(
                                           _('''
            <div class="alert alert-info" role="alert">
                <ul class="list_unstyle">
                    <li>当用API上传时，程序会以这里设置对文章正文txt进行截取</li>
                    <li>当选择开启自动简介时，首次访问内容页，如果没有简介则按此来处理，这个处理是毫秒级的，不需要考虑资源开销</li>
                </ul>
            </div>
        ''')))

    summary_length = models.PositiveIntegerField(
        verbose_name=_('简介字数'),
        validators=[MinValueValidator(0),
                    MaxValueValidator(500)],
        default=150,
        help_text=mark_safe(
            _('''
            <div class="alert alert-info" role="alert">
                <ul class="list_unstyle">
                    <li>当文章有简介时，可以选择模板过滤标签在模板<meta>中进行截取，以此来符合seo的要求</li>
                </ul>
            </div>
        ''')))

    comments_enabled = models.BooleanField(verbose_name=_('评论开关'),
                                           choices=STATIC_CHOICES,
                                           default=False,
                                           help_text=_('控制是否打开文章评论功能'))

    min_tag_length = models.PositiveIntegerField(
        verbose_name=_('标签最少字数'),
        validators=[MinValueValidator(0),
                    MaxValueValidator(20)],
        default=2,
        help_text=mark_safe(
            _('''
            <strong>功能说明：</strong>
            <ul style="margin-top:5px;">
                <li>避免不合适的短标签生成标签页（例如单个字词）</li>
                <li>低于此长度的标签：
                    <ul>
                        <li>可在文章中使用</li>
                        <li>不会生成独立标签页</li>
                    </ul>
                </li>
                <li>标签页内容匹配时自动过滤低于此长度的关键词</li>
                <li><span style="color:#dc3545;">设为0时关闭长度限制</span></li>
            </ul>
        ''')))

    date_hierarchy = models.BooleanField(
        verbose_name=_('内容时间导航'),
        choices=STATIC_CHOICES,
        default=False,
        help_text=
        _('控制是否打开内容顶部的时间导航功能，打开后会出现"所有日期 2025年9月 2025年10月"这样的导航，在数据量大的时候会导致打开内容列表较慢。'
          ))

    class Meta:
        verbose_name = _('内容扩展配置')
        verbose_name_plural = _('内容扩展配置')

    def __str__(self):
        return str(_("内容扩展配置"))  # 使用str()确保返回字符串类型
