"""
导入相关的 Pydantic schemas
"""

from datetime import datetime
from typing import Optional, List, Any, Dict
from pydantic import BaseModel, Field


class ChainProcessingResult(BaseModel):
    """链式处理结果"""
    products_created: int = Field(0, description="新增产品数")
    products_updated: int = Field(0, description="更新产品数")
    procurement_orders_created: int = Field(0, description="生成采购订单数")


class ImportStatusResponse(BaseModel):
    """导入状态响应"""
    status: str = Field(..., description="导入状态")
    start_time: datetime = Field(..., description="开始时间")
    files_processed: int = Field(0, description="处理文件数")
    total_imported: int = Field(0, description="总导入行数")
    total_failed: int = Field(0, description="总失败行数")
    errors: List[str] = Field(default_factory=list, description="错误列表")
    file_results: Optional[List[Dict[str, Any]]] = Field(None, description="文件结果详情")
    chain_processing: Optional[ChainProcessingResult] = Field(None, description="链式处理结果")


class FileImportResult(BaseModel):
    """单个文件导入结果"""
    file_name: str = Field(..., description="文件名")
    file_path: str = Field(..., description="文件路径")
    file_hash: str = Field(..., description="文件哈希")
    file_size: int = Field(..., description="文件大小")
    status: str = Field(..., description="处理状态")
    rows_total: int = Field(0, description="总行数")
    rows_imported: int = Field(0, description="成功导入行数")
    rows_failed: int = Field(0, description="失败行数")
    errors: List[str] = Field(default_factory=list, description="错误列表")
    start_time: datetime = Field(..., description="开始时间")
    error_message: Optional[str] = Field(None, description="错误信息")


class ProcessedFileResponse(BaseModel):
    """已处理文件响应"""
    id: int
    file_name: str
    file_path: Optional[str]
    file_hash: str
    file_size: Optional[int]
    processed_at: datetime
    rows_total: int
    rows_imported: int
    rows_failed: int
    status: str
    errors: Optional[List[str]] = None
    
    class Config:
        from_attributes = True


class RawOrderResponse(BaseModel):
    """原始订单响应"""
    id: int
    file_name: str
    row_idx: Optional[int]
    原始订单编号: Optional[str]
    网店名称: Optional[str]
    交易状态: Optional[str]
    付款时间: Optional[datetime]
    线上宝贝名称: Optional[str]
    数量: Optional[int]
    订单单价: Optional[float]
    created_at: datetime
    imported_at: datetime
    
    class Config:
        from_attributes = True


class OrderQueryParams(BaseModel):
    """订单查询参数"""
    skip: int = Field(0, ge=0, description="跳过记录数")
    limit: int = Field(100, ge=1, le=1000, description="返回记录数")
    file_name: Optional[str] = Field(None, description="文件名过滤")
    order_id: Optional[str] = Field(None, description="订单号过滤")
    status: Optional[str] = Field(None, description="交易状态过滤")
    start_date: Optional[datetime] = Field(None, description="开始时间过滤")
    end_date: Optional[datetime] = Field(None, description="结束时间过滤")


class PaginatedResponse(BaseModel):
    """分页响应基类"""
    total: int = Field(..., description="总记录数")
    skip: int = Field(..., description="跳过记录数")
    limit: int = Field(..., description="每页记录数")
    items: List[Any] = Field(..., description="数据项列表")


class SchedulerInfoResponse(BaseModel):
    """调度器信息响应"""
    status: str = Field(..., description="调度器状态")
    jobs: List[Dict[str, Any]] = Field(default_factory=list, description="任务列表")


class TriggerImportRequest(BaseModel):
    """触发导入请求"""
    force: bool = Field(False, description="是否强制重新处理已处理的文件")