from __future__ import annotations

from datetime import datetime

from sqlalchemy import BigInteger, Index, String, Text, func
from sqlalchemy.orm import Mapped, mapped_column

from supply_infra.db.base import Base

POINT_TYPE_INSPIRATION = "inspiration"
POINT_TYPE_PURPOSE = "purpose"
POINT_TYPE_KEY = "key"

POINT_TYPES = (POINT_TYPE_INSPIRATION, POINT_TYPE_PURPOSE, POINT_TYPE_KEY)


class MultiDemandVideoPoint(Base):
    """需求池视频点位表 — 灵感点/目的点/关键点按行存储。"""

    __tablename__ = "multi_demand_video_point"
    __table_args__ = (
        Index("idx_multi_demand_video_point_video_type", "video_id", "point_type"),
    )

    id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
    video_id: Mapped[str] = mapped_column(String(64), nullable=False, comment="视频id")
    point_type: Mapped[str] = mapped_column(
        String(32),
        nullable=False,
        comment="点类型：inspiration / purpose / key",
    )
    point_data: Mapped[str | None] = mapped_column(
        Text, nullable=True, comment="点"
    )
    point_desc: Mapped[str | None] = mapped_column(
        Text, nullable=True, comment="点描述"
    )
    create_time: Mapped[datetime] = mapped_column(
        nullable=False,
        server_default=func.now(),
        comment="创建时间",
    )
    update_time: Mapped[datetime] = mapped_column(
        nullable=False,
        server_default=func.now(),
        onupdate=func.now(),
        comment="更新时间",
    )
