#hz 评论模块的Django模板标签
#hz 本模块定义了评论相关的自定义模板标签，用于在模板中处理和显示评论数据

from django import template

#hz 注册模板标签库
register = template.Library()


#hz 解析评论树结构的模板标签
#hz 获得当前评论的所有子评论列表（递归获取所有嵌套的子评论）
#hz 用法: {% parse_commenttree article_comments comment as childcomments %}
@register.simple_tag
def parse_commenttree(commentlist, comment):
    """获得当前评论子评论的列表
        用法: {% parse_commenttree article_comments comment as childcomments %}
    """
    #hz 存储所有子评论的列表
    datas = []

    #hz 递归解析评论树的内部函数
    #hz 从指定的评论开始，递归查找所有子评论（支持多级嵌套）
    def parse(c):
        #hz 查找当前评论的所有直接子评论（父评论为c且已启用的评论）
        childs = commentlist.filter(parent_comment=c, is_enable=True)
        #hz 遍历所有子评论
        for child in childs:
            #hz 将子评论添加到结果列表
            datas.append(child)
            #hz 递归解析子评论的子评论（实现多级嵌套评论的解析）
            parse(child)

    #hz 从传入的评论开始解析评论树
    parse(comment)
    #hz 返回所有子评论的列表
    return datas


#hz 显示评论项的包含标签
#hz 渲染评论项的模板，支持区分父评论和子评论的显示样式
@register.inclusion_tag('comments/tags/comment_item.html')
def show_comment_item(comment, ischild):
    """评论"""
    #hz 设置评论的显示深度：如果是子评论（ischild=True），深度为1；否则深度为2
    #hz 深度用于控制评论的缩进或样式，实现评论的层级显示效果
    depth = 1 if ischild else 2
    #hz 返回传递给模板的上下文数据
    return {
        'comment_item': comment,  #hz 评论对象
        'depth': depth  #hz 评论的显示深度
    }
