from django.conf import settings
from django.db import models
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _

from ..blog.models import Article


#ssj
# 定义评论模型，用于存储用户对文章的评论数据
class Comment(models.Model):
    # 评论正文内容
    # 使用 TextField 存储较长文本，限制最大长度为 300 字符
    # verbose_name 设置为 '正文'，在管理后台等界面中显示为字段标签
    body = models.TextField('正文', max_length=300)

    # 评论创建时间
    # 自动记录评论的创建时间，默认值为当前时间（now）
    # verbose_name 为国际化字符串 'creation time'
    creation_time = models.DateTimeField(_('creation time'), default=now)

    # 评论最后修改时间
    # 记录评论最后一次被修改的时间，默认值为当前时间（通常在保存时更新）
    # verbose_name 为国际化字符串 'last modify time'
    last_modify_time = models.DateTimeField(_('last modify time'), default=now)

    # 评论作者
    # 外键关联到用户模型（支持自定义用户模型）
    # verbose_name 为 'author'（国际化），on_delete=models.CASCADE 表示用户删除时，其评论也级联删除
    author = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        verbose_name=_('author'),
        on_delete=models.CASCADE)

    # 所属文章
    # 外键关联到 Article 模型，表示该评论属于哪篇文章
    # verbose_name 为 'article'（国际化），级联删除：文章删除时，其所有评论也被删除
    article = models.ForeignKey(
        Article,
        verbose_name=_('article'),
        on_delete=models.CASCADE)

    # 父级评论（用于实现嵌套评论/回复功能）
    # 外键指向自身（'self'），实现树形结构
    # blank=True, null=True 表示可以为空（即一级评论没有父评论）
    # verbose_name 为 'parent comment'（国际化），级联删除：父评论删除时，其子评论也删除
    parent_comment = models.ForeignKey(
        'self',
        verbose_name=_('parent comment'),
        blank=True,
        null=True,
        on_delete=models.CASCADE)

    # 是否启用（是否显示）
    # BooleanField 用于控制评论是否公开显示
    # default=False 表示默认不启用（需审核或手动开启）
    # blank=False, null=False 表示该字段不可为空，必须有值
    # verbose_name 为 'enable'（国际化）
    is_enable = models.BooleanField(_('enable'),
                                    default=False, blank=False, null=False)

#ssj
    class Meta:
        """
        模型元数据类：定义模型的元信息，如排序、名称等
        """
        # 默认排序：按 id 降序排列（最新的评论在前）
        ordering = ['-id']

        # 模型的可读名称（单数形式），用于管理后台等界面显示
        verbose_name = _('comment')

        # 模型的可读名称（复数形式），此处与单数相同
        verbose_name_plural = verbose_name

        # 指定获取最新一条记录时依据的字段
        get_latest_by = 'id'

#ssj
    def __str__(self):
        """
        返回该评论对象的字符串表示
        通常在管理后台或调试时显示
        此处返回评论的正文内容（body）
        """
        return self.body
