from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone


class Migration(migrations.Migration):
    # 表示这是一个初始迁移（即创建模型的第一次迁移）
    initial = True

    # 定义该迁移所依赖的其他迁移
    # 只有当这些依赖的迁移执行完成后，当前迁移才会执行
    dependencies = [
        # 依赖于 blog 应用下的 '0001_initial' 迁移
        # 确保 blog 应用中的模型（如 Article）已创建
        ('blog', '0001_initial'),
        # 依赖于用户模型的迁移
        # 使用 migrations.swappable_dependency 和 settings.AUTH_USER_MODEL
        # 是为了支持自定义用户模型（即项目可能使用了非默认的 User 模型）
        # Django 会自动解析为实际使用的用户模型对应的迁移
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    # 定义本次迁移要执行的数据库操作列表
    operations = [
        # 创建一个名为 'Comment' 的数据库模型（对应一张数据表）
        migrations.CreateModel(
            name='Comment', # 模型名称
            fields=[  # 模型包含的字段列表
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                # 主键字段：id
                # 使用 BigAutoField（64位整数），自动递增，作为主键，不序列化为单独字段（serialize=False）
                ('body', models.TextField(max_length=300, verbose_name='正文')),
                # 正文字段：body
                # 文本字段，最大长度300字符，显示名称为“正文”
                ('created_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='创建时间')),
                # 创建时间字段：created_time
                # DateTimeField，默认值为当前时间（使用 django.utils.timezone.now 函数）
                # 显示名称为“创建时间”
                ('last_mod_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='修改时间')),
                # 最后修改时间字段：last_mod_time
                # DateTimeField，默认值也为当前时间（初始创建时与创建时间相同）
                # 后续可通过逻辑更新
                # 显示名称为“修改时间”
                ('is_enable', models.BooleanField(default=True, verbose_name='是否显示')),
                # 是否启用字段：is_enable
                # BooleanField，默认为 True，表示评论是否显示
                # 用于软删除或审核功能
                ('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='blog.article', verbose_name='文章')),
                # 外键字段：article
                # 关联到 blog 应用中的 Article 模型（'blog.article'）
                # on_delete=models.CASCADE：当文章被删除时，该评论也会被级联删除
                # 显示名称为“文章”
                ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='作者')),
                # 外键字段：author
                # 关联到当前项目配置的用户模型（支持自定义用户）
                # 当用户被删除时，该用户的评论也会被级联删除
                # 显示名称为“作者”
                ('parent_comment', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='comments.comment', verbose_name='上级评论')),
                # 外键字段：parent_comment
                # 实现评论的嵌套/回复功能，指向同一模型（comments.Comment）的其他评论
                # blank=True, null=True：允许为空，表示可以是一级评论（顶级评论）
                # on_delete=CASCADE：上级评论被删除时，其子评论也一并删除
                # 显示名称为“上级评论”
            ],
            options={    # 模型的元选项（Meta options）
                'verbose_name': '评论',           # 单数形式的可读名称
                'verbose_name_plural': '评论',    # 复数形式的可读名称（此处未复数化，与单数相同）
                'ordering': ['-id'],              # 默认排序：按 id 降序排列（最新的在前）
                'get_latest_by': 'id',            # 使用 latest() 方法时，默认按 id 获取最新一条记录
            },
        ),
    ]
