"""catalog_transfer 输入/输出模型。"""
from __future__ import annotations

from typing import Optional, List, Literal

from pydantic import BaseModel, Field

Scope = Literal["selected", "filtered", "all"]


class ExportFilter(BaseModel):
    """filtered 范围下的筛选条件，语义与管理端商品列表一致。"""
    keyword: Optional[str] = None
    category: Optional[str] = None
    category_id: Optional[int] = None
    status: Optional[str] = None
    expiry_status: Optional[str] = None


class ExportRequest(BaseModel):
    scope: Scope
    product_ids: List[int] = Field(default_factory=list)       # 仅 selected 使用
    filter: ExportFilter = Field(default_factory=ExportFilter)  # 仅 filtered 使用
    rows_per_file: int = Field(500, ge=100, le=10000)


class EstimateResult(BaseModel):
    product_count: int   # 主商品数
    row_count: int       # 输出行数（一规格一行）
    file_count: int      # 预计文件数


class TaskResponse(BaseModel):
    task_id: int


class TaskSummary(BaseModel):
    task_id: int
    task_type: str
    status: str
    payload: dict = Field(default_factory=dict)
    result: dict = Field(default_factory=dict)
    created_at: Optional[str] = None
    completed_at: Optional[str] = None
