from django.db import models
from django.forms import ValidationError
from django.utils.translation import gettext_lazy as _  # 添加导入
from .common import ConfigCommonModel
from django.core.validators import RegexValidator, MinLengthValidator


class GlobalDNSConfig(ConfigCommonModel):
    """
    全局DNS配置核心模型
    表名保留为 global_dns (通过db_table自定义)
    """

    class Status(models.TextChoices):
        ENABLED = 'enabled', _('启用')
        DISABLED = 'disabled', _('停用')

    DNS_TYPE_CHOICES = [
        ('content_to_home', _('文章内容页变二级域名首页')),
        ('global_site', _('整站泛二级域名')),
    ]

    # 核心配置字段
    status = models.CharField(verbose_name=_('状态'),
                              max_length=10,
                              choices=Status.choices,
                              default=Status.DISABLED)
    dns_type = models.CharField(verbose_name=_('泛解析方式'),
                                max_length=20,
                                choices=DNS_TYPE_CHOICES,
                                default='content_to_home')
    primary_domain = models.CharField(
        verbose_name=_('主域名'),
        max_length=253,  # 符合RFC标准最大长度
        validators=[
            RegexValidator(
                regex=r'^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$',
                message=_('请输入符合RFC标准的小写域名（如：example.com）'),
                flags=2  # 忽略大小写
            )
        ],
        help_text=_('仅接受小写字母和数字（例：your-domain.com）'))
    random_length = models.CharField(
        verbose_name=_('随机长度'),
        max_length=7,
        default='6-8',
        validators=[
            RegexValidator(r'^\d+-\d+$', _('格式：最小-最大（例6-8）')),
            MinLengthValidator(3)
        ],
        blank=True,
        help_text=_("随机字符串长度范围（示例：6-8 生成6到8位字符），该设置用于整站泛二级域名"))

    class Meta:
        verbose_name = _('全局DNS配置')
        verbose_name_plural = _('全局DNS配置')

    def __str__(self):
        return str(
            _("全局DNS配置（{status}）").format(status=self.get_status_display()))

    def clean(self):
        if self.dns_type == 'global_site' and not self.random_length.strip():
            raise ValidationError({'random_length': _('当选择整站泛二级域名时须设置随机字符')})
        return super().clean()
