"""
批量操作相关的Pydantic模型
"""

from typing import List, Optional, Dict, Any
from pydantic import BaseModel, Field
from enum import Enum


class BatchOperationType(str, Enum):
    """批量操作类型"""
    UPDATE_PROCUREMENT = "update_procurement"  # 更新采购方式
    UPDATE_STATUS = "update_status"  # 更新状态
    UPDATE_PRIORITY = "update_priority"  # 更新优先级
    UPDATE_PRICE = "update_price"  # 更新价格
    UPDATE_NOTES = "update_notes"  # 更新备注
    UPDATE_BRAND = "update_brand"  # 更新品牌


class ProductBatchUpdateItem(BaseModel):
    """单个产品的批量更新项"""
    product_id: int = Field(..., description="产品ID")
    品牌: Optional[str] = Field(None, description="品牌")
    procurement_method: Optional[str] = Field(None, description="采购方式")
    status: Optional[str] = Field(None, description="产品状态")
    is_active: Optional[bool] = Field(None, description="是否激活")
    is_urgent: Optional[bool] = Field(None, description="是否紧急")
    priority_score: Optional[int] = Field(None, ge=0, le=100, description="优先级分数")
    avg_price: Optional[float] = Field(None, description="平均价格")
    manual_notes: Optional[str] = Field(None, description="人工备注")


class ProductBatchUpdateRequest(BaseModel):
    """产品批量更新请求"""
    updates: List[ProductBatchUpdateItem] = Field(..., description="批量更新项列表")
    operation_type: Optional[str] = Field(None, description="操作类型")  # 改为可选的字符串，不强制验证枚举
    operator: Optional[str] = Field(None, description="操作员")
    reason: Optional[str] = Field(None, description="操作原因")


class ProductBatchUpdateResponse(BaseModel):
    """产品批量更新响应"""
    success: bool = Field(..., description="操作是否成功")
    total: int = Field(..., description="总数量")
    updated: int = Field(..., description="成功更新数量")
    failed: int = Field(..., description="失败数量")
    errors: List[Dict[str, Any]] = Field(default_factory=list, description="错误详情")
    message: str = Field(..., description="操作消息")


class BatchImageDownloadRequest(BaseModel):
    """批量图片下载请求"""
    product_ids: List[int] = Field(..., description="产品ID列表")
    force_redownload: bool = Field(False, description="是否强制重新下载")
    async_process: bool = Field(True, description="是否异步处理")


class BatchImageDownloadResponse(BaseModel):
    """批量图片下载响应"""
    task_id: Optional[str] = Field(None, description="异步任务ID")
    total: int = Field(..., description="总数量")
    queued: int = Field(..., description="已加入队列数量")
    message: str = Field(..., description="操作消息")


class BatchFilterUpdateRequest(BaseModel):
    """基于筛选条件的批量更新请求"""
    filters: Dict[str, Any] = Field(..., description="筛选条件")
    update_fields: Dict[str, Any] = Field(..., description="要更新的字段")
    preview: bool = Field(False, description="是否预览（不执行实际更新）")
    operator: Optional[str] = Field(None, description="操作员")
    reason: Optional[str] = Field(None, description="操作原因")


class BatchFilterUpdateResponse(BaseModel):
    """基于筛选条件的批量更新响应"""
    success: bool = Field(..., description="操作是否成功")
    matched: int = Field(..., description="匹配的记录数")
    updated: int = Field(..., description="更新的记录数")
    preview_data: Optional[List[Dict[str, Any]]] = Field(None, description="预览数据")
    message: str = Field(..., description="操作消息")