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 RateLimitConfig(ConfigCommonModel):
    SWITCH_CHOICES = [
        (True, _('开启')),
        (False, _('关闭')),
    ]

    switch = models.BooleanField(verbose_name=_('功能开关'),
                                 choices=SWITCH_CHOICES,
                                 default=False)

    rate_key = models.CharField(verbose_name=_('限制依据'),
                                max_length=10,
                                default='ip',
                                help_text=mark_safe(
                                    _('''
            <div class="alert alert-info">
            <p><strong>作用‌：</strong>定义限流标识的提取方式，支持多种模式：</p>
            <dl>
                <dd>'ip'：基于客户端IP地址限流</dd>
                <dd>'user'：基于已登录用户的唯一标识（需启用Django认证系统）</dd>
                <dd>'post:&lt;field_name&gt;'：基于POST请求中的表单字段值（如 post:mobile 基于手机号）</dd>
                <dd>'header:&lt;header_name&gt;'：基于请求头字段（如 header:x-api-key）</dd>
            </dl>
            <p><strong>可以多种方式组合使用</strong></p>
            <dl>
                <dd>多字段联合标识：支持通过逗号分隔不同标识字段，形成复合限流键值。例如：ip,user</dd>
                <dd>静态字段与动态字段结合：可混合固定字符串与动态提取字段，构建业务维度的限流策略：header:x-device-id,post:operation_type</dd>
                <dd>'post:&lt;field_name&gt;'：基于POST请求中的表单字段值（如 post:mobile 基于手机号）</dd>
            </dl>
        </div>
        ''')))

    rate_link = models.CharField(verbose_name=_('跳转链接'),
                                 max_length=20,
                                 default='/',
                                 help_text=_('频率超限后跳转的URL路径'))

    global_rate = models.CharField(verbose_name=_('全局访问频率'),
                                   max_length=20,
                                   default='None',
                                   help_text=_('格式：次数/单位（如5/s）'),
                                   null=False,
                                   blank=False)

    home_rate = models.CharField(
        verbose_name=_('首页访问频率'),
        max_length=20,
        default='None',
        help_text=_('首页访问频率限制设置'),
    )

    category_rate = models.CharField(
        verbose_name=_('栏目访问频率'),
        max_length=20,
        default='None',
        help_text=_('栏目页面访问频率限制设置'),
    )

    item_rate = models.CharField(
        verbose_name=_('内容访问频率'),
        max_length=20,
        default='None',
        help_text=_('内容页面访问频率限制设置'),
    )

    tag_rate = models.CharField(
        verbose_name=_('Tag页面访问频率'),
        max_length=20,
        default='None',
        help_text=_('Tag页面访问频率限制设置'),
    )

    class Meta:
        verbose_name = _('频率限制配置')
        verbose_name_plural = _('频率限制配置')

    def __str__(self):
        return str(_('全局频率限制配置'))  # 使用str()确保返回字符串类型
