"""
素材分类模型
============

装修工序的三级分类体系，支持通过 parent_id 链式关联实现无限层级。

层级定义：
- level=1：一级分类（装修大阶段），如 前期准备类、水电隐蔽类
- level=2：二级分类（具体工序），如 防水施工、电路施工
- level=3：三级分类（具体场景），如 卫生间基层清理-防水施工
"""

from sqlalchemy import BigInteger, ForeignKey, String
from sqlalchemy.orm import Mapped, mapped_column

from app.models.base import BaseModelBigInt


class BrollCategory(BaseModelBigInt):
    """空镜素材分类"""

    __tablename__ = "mjk_broll_categories"

    slug: Mapped[str] = mapped_column(
        String(128),
        unique=True,
        nullable=False,
        comment="分类标识符，URL友好格式",
    )

    name: Mapped[str] = mapped_column(
        String(256),
        nullable=False,
        comment="分类中文名称，三级分类直接对应 scene 标准化后的值",
    )

    parent_id: Mapped[int | None] = mapped_column(
        BigInteger,
        ForeignKey("mjk_broll_categories.id"),
        nullable=True,
        comment="父分类ID，NULL 表示根分类（一级）",
    )

    level: Mapped[int] = mapped_column(
        BigInteger,
        default=1,
        nullable=False,
        comment="层级：1=一级（大阶段），2=二级（工序），3=三级（场景）",
    )

    sort_order: Mapped[int] = mapped_column(
        BigInteger,
        default=0,
        nullable=False,
        comment="排序权重，装修流程有先后顺序",
    )

    status: Mapped[str] = mapped_column(
        String(16),
        default="active",
        nullable=False,
        comment="状态：active（启用）/ disabled（停用）/ deleted（软删除）",
    )
