"""CPS 可推广活动池(cps_activity)。

运营预存常推的活动(券),生成链接时选它,省得每次记 actId。当前只接美团:
`act_id` = 美团联盟「我要推广-活动推广」第一列的物料 ID。`platform` 预留,接
淘宝/京东时复用本表(各自的活动标识)。
"""
from __future__ import annotations

from datetime import datetime

from sqlalchemy import DateTime, Integer, String, Text, func
from sqlalchemy.orm import Mapped, mapped_column

from app.db.base import Base


class CpsActivity(Base):
    __tablename__ = "cps_activity"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
    platform: Mapped[str] = mapped_column(String(20), nullable=False, default="meituan")  # meituan|taobao|jd
    name: Mapped[str] = mapped_column(String(128), nullable=False)
    # 美团活动物料 ID(actId);淘宝/京东接入后存各自活动标识。
    act_id: Mapped[str | None] = mapped_column(String(64), nullable=True)
    # 美团商品券 productViewSign(与 act_id 二选一转链;多数活动用 act_id)。
    product_view_sign: Mapped[str | None] = mapped_column(String(128), nullable=True)
    # 淘宝:整段淘口令文本(落地页原样复制);京东:推广链接(落地页 302 跳)。美团不用这个(用 act_id)。
    payload: Mapped[str | None] = mapped_column(Text, nullable=True)
    # 淘宝落地页主视觉图(绝对 URL,基于 CPS_REDIRECT_BASE)。运营建活动时上传/选已有,落地页按活动展示。
    image_url: Mapped[str | None] = mapped_column(String(512), nullable=True)
    status: Mapped[str] = mapped_column(String(20), nullable=False, default="active")  # active | archived
    remark: Mapped[str | None] = mapped_column(String(256), nullable=True)
    created_at: Mapped[datetime] = mapped_column(
        DateTime(timezone=True), server_default=func.now(), nullable=False
    )

    def __repr__(self) -> str:  # pragma: no cover
        return f"<CpsActivity id={self.id} platform={self.platform} name={self.name!r}>"
