"""
Video generation API schemas
"""

from typing import Optional, Literal
from pydantic import BaseModel, Field


class VideoGenerateRequest(BaseModel):
    """Video generation request"""
    
    # === Input ===
    text: str = Field(..., description="Source text for video generation")
    
    # === Processing Mode ===
    mode: Literal["generate", "fixed"] = Field(
        "generate",
        description="Processing mode: 'generate' (AI generates narrations) or 'fixed' (use text as-is)"
    )
    
    # === Optional Title ===
    title: Optional[str] = Field(None, description="Video title (auto-generated if not provided)")
    
    # === Basic Config ===
    n_scenes: int = Field(5, ge=1, le=20, description="Number of scenes (generate mode only)")
    voice_id: str = Field("zh-CN-YunjianNeural", description="TTS voice ID")
    
    # === LLM Parameters ===
    min_narration_words: int = Field(5, ge=1, le=100, description="Min narration words")
    max_narration_words: int = Field(20, ge=1, le=200, description="Max narration words")
    min_image_prompt_words: int = Field(30, ge=10, le=100, description="Min image prompt words")
    max_image_prompt_words: int = Field(60, ge=10, le=200, description="Max image prompt words")
    
    # === Image Parameters ===
    image_width: int = Field(1024, ge=512, le=2048, description="Image width")
    image_height: int = Field(1024, ge=512, le=2048, description="Image height")
    image_workflow: Optional[str] = Field(None, description="Custom image workflow")
    
    # === Video Parameters ===
    video_width: int = Field(1080, ge=512, le=3840, description="Video width")
    video_height: int = Field(1920, ge=512, le=3840, description="Video height")
    video_fps: int = Field(30, ge=15, le=60, description="Video FPS")
    
    # === Frame Template ===
    frame_template: Optional[str] = Field(None, description="HTML template name (e.g., 'default.html')")
    
    # === Image Style ===
    prompt_prefix: Optional[str] = Field(None, description="Image style prefix")
    
    # === BGM ===
    bgm_path: Optional[str] = Field(None, description="Background music path")
    bgm_volume: float = Field(0.3, ge=0.0, le=1.0, description="BGM volume (0.0-1.0)")
    
    class Config:
        json_schema_extra = {
            "example": {
                "text": "Atomic Habits teaches us that small changes compound over time to produce remarkable results.",
                "mode": "generate",
                "n_scenes": 5,
                "voice_id": "zh-CN-YunjianNeural",
                "title": "The Power of Atomic Habits"
            }
        }


class VideoGenerateResponse(BaseModel):
    """Video generation response (synchronous)"""
    success: bool = True
    message: str = "Success"
    video_url: str = Field(..., description="URL to access generated video")
    duration: float = Field(..., description="Video duration in seconds")
    file_size: int = Field(..., description="File size in bytes")


class VideoGenerateAsyncResponse(BaseModel):
    """Video generation async response"""
    success: bool = True
    message: str = "Task created successfully"
    task_id: str = Field(..., description="Task ID for tracking progress")

