from django.db import models
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _  # 添加导入
from .common import ConfigCommonModel
from django.utils.safestring import mark_safe


class SensitiveConfig(ConfigCommonModel):
    # 使用gettext_lazy翻译choices选项
    SWITCH_CHOICES = (
        (True, _('开启')),
        (False, _('关闭')),
    )
    HANDLE_CHOICES = (
        (0, _("删除")),
        (1, _("字符替换")),
        (2, _("首尾保留")),
    )

    upload_switch = models.BooleanField(
        verbose_name=_('上传敏感过滤开关'),
        choices=SWITCH_CHOICES,
        default=False,
        help_text=_('当通过API上传内容时，文章如果出现敏感词，按下面方式处理。'))

    filter_switch = models.BooleanField(verbose_name=_('敏感过滤开关'),
                                        choices=SWITCH_CHOICES,
                                        default=False,
                                        help_text=_('当打开时，以下列处理方式进行处理'))

    handle_method = models.IntegerField(verbose_name=_('处理方法'),
                                        choices=HANDLE_CHOICES,
                                        default=1,
                                        help_text=mark_safe(
                                            _('''
            <div class="alert alert-info">
                <p>删除:删除敏感词.例:"我是敏感词"==>"我是"</p>
                <p>替换:替换敏感词.例:"我是敏感词"==>"我是***"</p>
                <p>首尾保留:删除敏感词.例:"我是敏感词"==>"我是敏*词"</p>
            </div>
        ''')))

    replace_with = models.CharField(
        verbose_name=_('替换为'),
        max_length=300,
        default='*',
        blank=True,
        help_text=_('敏感词将替换为相同长度的该字符，例如输入"*"会将"测试"替换为"**"'))

    sensitive_words = models.TextField(verbose_name=_('敏感词'),
                                       blank=True,
                                       help_text=mark_safe(
                                           _('''
            输入格式：每行一个词。默认词库：
            <a class="btn btn-sm btn-link file-preview-btn" 
                    data-path="shared/txt/sensitive_words.txt"
                    data-bs-toggle="tooltip"
                    title="安全预览文件内容">
                <i class="bi bi-eye me-1"></i>
                <span class="d-none d-md-inline">安全预览</span>
            </a>
            '<span class="copy-status"></span>'
        ''')))

    class Meta:
        verbose_name = _('敏感配置')
        verbose_name_plural = _('敏感配置')

    def __str__(self):
        return str(_("系统敏感配置"))  # 使用str()确保返回字符串类型
