#hz 评论模块的数据模型定义
#hz 本模块定义了博客评论系统的核心数据模型Comment，支持评论的创建、管理以及嵌套评论功能

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


# Create your models here.

#hz 评论模型类
#hz 用于存储博客文章的评论信息，支持评论的正文内容、作者、关联文章、父评论（支持嵌套评论）等字段
class Comment(models.Model):
    #hz 评论正文内容，最大长度为300字符
    body = models.TextField('正文', max_length=300)
    #hz 评论创建时间，默认为当前时间
    creation_time = models.DateTimeField(_('creation time'), default=now)
    #hz 评论最后修改时间，默认为当前时间
    last_modify_time = models.DateTimeField(_('last modify time'), default=now)
    #hz 评论作者，关联到用户模型，使用级联删除（删除用户时同时删除该用户的所有评论）
    author = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        verbose_name=_('author'),
        on_delete=models.CASCADE)
    #hz 评论关联的文章，关联到Article模型，使用级联删除（删除文章时同时删除该文章的所有评论）
    article = models.ForeignKey(
        Article,
        verbose_name=_('article'),
        on_delete=models.CASCADE)
    #hz 父评论，支持嵌套评论功能，可以为空（表示顶级评论）
    #hz 使用'self'实现自关联，允许评论回复其他评论
    parent_comment = models.ForeignKey(
        'self',
        verbose_name=_('parent comment'),
        blank=True,
        null=True,
        on_delete=models.CASCADE)
    #hz 评论是否启用（显示），默认为False（需要审核后才能显示）
    is_enable = models.BooleanField(_('enable'),
                                    default=False, blank=False, null=False)

    #hz 模型的元数据配置
    class Meta:
        #hz 按ID降序排列，最新评论在前
        ordering = ['-id']
        #hz 单数形式的模型名称
        verbose_name = _('comment')
        #hz 复数形式的模型名称
        verbose_name_plural = verbose_name
        #hz 获取最新记录时使用的字段
        get_latest_by = 'id'

    #hz 对象的字符串表示方法，返回评论的正文内容
    def __str__(self):
        return self.body
