#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
海报API模型定义 - 使用 camelCase 命名约定
"""

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


class PosterGenerateRequest(BaseModel):
    """海报生成请求模型"""
    templateId: str = Field("vibrant", description="模板ID")
    imagesBase64: Optional[str] = Field(None, description="图像base64编码")
    posterContent: Optional[Dict[str, Any]] = Field(None, description="海报内容，如果提供则直接使用此内容")
    contentId: Optional[str] = Field(None, description="内容ID，用于AI生成内容")
    productId: Optional[str] = Field(None, description="产品ID，用于AI生成内容")
    scenicSpotId: Optional[str] = Field(None, description="景区ID，用于AI生成内容")
    numVariations: int = Field(3, description="要生成的海报变体数量, 默认为3", ge=1, le=5)
    forceLlmGeneration: bool = Field(False, description="是否强制使用LLM重新生成内容")
    generatePsd: bool = Field(False, description="是否生成PSD分层文件")
    psdOutputPath: Optional[str] = Field(None, description="PSD文件输出路径（可选，默认自动生成）")
    
    class Config:
        json_schema_extra = {
            "example": {
                "templateId": "vibrant",
                "imagesBase64": "",
                "numVariations": 1,
                "forceLlmGeneration":False,
                "generatePsd": True,
                "psdOutputPath": "custom_poster.psd",
                "contentId":"1",
                "productId":"1",
                "scenicSpotId":"1",
                "posterContent":{
                    "title":"天津冒险湾",
                    "slogan":"天津冒险湾，让你体验不一样的冒险之旅"
                }
            }
        }

class TemplateInfo(BaseModel):
    """模板信息模型"""
    id: str
    name: str
    description: str
    handler_path: str = Field(alias="handlerPath")
    class_name: str = Field(alias="className")
    system_prompt: Optional[str] = None
    user_prompt_template: Optional[str] = None
    required_fields: Optional[List[str]] = None
    optional_fields: Optional[List[str]] = None
    size: Optional[List[int]] = None
    is_active: bool = Field(alias="isActive")
    
    class Config:
        allow_population_by_field_name = True

class TemplateListResponse(BaseModel):
    """模板列表响应模型"""
    templates: List[TemplateInfo]
    totalCount: int

class ImageUsageInfo(BaseModel):
    """图像使用信息模型"""
    imageId: int
    usageCount: int
    firstUsedAt: str
    lastUsedAt: str
    usageContext: List[str]

class PosterGenerateResponse(BaseModel):
    """海报生成响应模型"""
    requestId: str
    templateId: str
    resultImagesBase64: List[Dict[str, Any]] = Field(description="生成的海报图像(base64编码)列表")
    psdFiles: Optional[List[Dict[str, Any]]] = Field(None, description="生成的PSD文件信息列表")
    metadata: Dict[str, Any] = Field(default_factory=dict)
    
    class Config:
        json_encoders = {
            datetime: lambda v: v.isoformat()
        }

class ImageUsageRequest(BaseModel):
    """图像使用查询请求模型"""
    imageIds: List[int]

class ImageUsageResponse(BaseModel):
    """图像使用情况响应模型"""
    requestId: str
    imageUsageInfo: List[ImageUsageInfo]
    summary: Dict[str, Any] 
    