"""首页轮播「种子」条目(运营可配的兜底假数据 = 假数据生成规则)。

客户端首页顶部「用户****xxx 比价后节省 xx 元」滚动条:数据源是全平台真实比价记录,
但冷启动 / 低谷期真实记录不够 N 条时,用本表的种子条目补齐到 N 条「混播」,保证轮播永不空。
运营后台可增删改本表。真实够时种子不出现。

种子是「规则」而非「死记录」:
- masked_user 可空——留空则 feed 展示时按脱敏格式随机合成用户名(并避开同屏撞名),
  风格与真实条一致、运营零心智、永不穿帮;填了则固定用该名。
- 金额是 [min_cents, max_cents] 区间,feed 每次在区间内随机取值(固定金额则 min==max),
  让同一种子每次展示的数字有浮动,更像真的。
- sort_order 仅供后台列表排序;feed 是公平随机抽取(不看 sort_order),保证所有启用种子都有机会露出。
"""
from __future__ import annotations

from datetime import datetime

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

from app.db.base import Base


class OpsMarqueeSeed(Base):
    __tablename__ = "ops_marquee_seed"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
    # 脱敏用户名(手机尾号 / 中文昵称风格,如「138****5678」「省钱**」);留空(NULL)或旧「用户****xxx」
    # 模板名 → feed 展示时随机合成混合风格名(避开撞名、自愈历史种子)
    masked_user: Mapped[str | None] = mapped_column(String(64), nullable=True)
    # 节省金额区间(分);feed 每次在 [min,max] 随机取一个值。固定金额则 min==max。客户端 ÷100 显示「x.xx 元」
    min_cents: Mapped[int] = mapped_column(Integer, nullable=False)
    max_cents: Mapped[int] = mapped_column(Integer, nullable=False)
    # 停用的种子不参与混播
    enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True)
    # 仅供后台列表排序(小在前);feed 是公平随机抽取,不看此字段
    sort_order: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
    created_at: Mapped[datetime] = mapped_column(
        DateTime(timezone=True), server_default=func.now(), nullable=False
    )

    def __repr__(self) -> str:  # pragma: no cover
        return f"<OpsMarqueeSeed id={self.id} user={self.masked_user}>"
