"""admin 首页轮播种子 schemas。金额单位:分(前端展示 ÷100 取元)。

种子 = 生成规则:masked_user 可空(空→feed 随机合成名)、金额是 [min_cents, max_cents] 区间。
"""
from __future__ import annotations

from pydantic import BaseModel, Field


class OpsMarqueeSeedOut(BaseModel):
    id: int
    masked_user: str | None = None
    min_cents: int
    max_cents: int
    enabled: bool
    sort_order: int
    created_at: str | None = None


class OpsMarqueeSeedCreate(BaseModel):
    masked_user: str | None = None  # 空 / 不传 → feed 随机合成脱敏名
    min_cents: int
    max_cents: int
    enabled: bool = True
    sort_order: int = 0


class OpsMarqueeSeedUpdate(BaseModel):
    # masked_user:不传=不改;传空串=清空(改回随机合成);传值=固定该名
    masked_user: str | None = None
    min_cents: int | None = None
    max_cents: int | None = None
    enabled: bool | None = None
    sort_order: int | None = None


class OpsMarqueeSeedBulkCreate(BaseModel):
    """批量生成 count 条自动合成名种子(冷启动铺量)。"""
    count: int
    min_cents: int
    max_cents: int
    enabled: bool = True


class OpsMarqueeSeedBatchDelete(BaseModel):
    """批量删除选中的种子。"""
    ids: list[int] = Field(..., max_length=500)  # 上限防超大列表(审计行/IN 子句过大)


class OpsMarqueeSeedBatchEnable(BaseModel):
    """批量启用 / 停用选中的种子。"""
    ids: list[int] = Field(..., max_length=500)
    enabled: bool


class OpsSavingsFeedPreviewItem(BaseModel):
    masked_user: str
    saved_amount_cents: int
    time: str


class OpsSavingsFeedPreviewOut(BaseModel):
    """运营预览:实际混播出来的 feed(真实记录会插队,与客户端一致)。"""
    items: list[OpsSavingsFeedPreviewItem]


class OpsRealRecordItem(BaseModel):
    masked_user: str          # 脱敏后展示名(与 app 一致)
    saved_amount_cents: int   # 节省金额(分)
    created_at: str           # 比价记录时间(YYYY-MM-DD HH:MM)
    user_id: int              # 真实 user_id(供运营核对,不下发客户端)


class OpsRealRecordsOut(BaseModel):
    """分页浏览「全部可展示的真实记录」(success+省>0,不去重、稳定顺序)。"""
    items: list[OpsRealRecordItem]
    total: int                # 满足条件的真实记录总数(算页数用)
