from enum import Enum
from typing import Optional

from pydantic import BaseModel, Field


class Resolution(str, Enum):
    px256 = "256px"
    px768 = "768px"


class AspectRatio(str, Enum):
    landscape  = "16:9"
    portrait   = "9:16"
    square     = "1:1"
    cinematic  = "2.39:1"


class CondType(str, Enum):
    t2v      = "t2v"
    i2v_head = "i2v_head"


class GenerateRequest(BaseModel):
    prompt:       str         = Field(..., min_length=1, max_length=2000, description="文本提示词")
    resolution:   Resolution  = Field(Resolution.px256,    description="分辨率")
    aspect_ratio: AspectRatio = Field(AspectRatio.landscape, description="画面比例")
    num_frames:   int         = Field(49,  ge=1,  le=129, description="帧数（4k+1，建议 49=~2s，97=~4s，129=~5s）")
    motion_score: int         = Field(4,   ge=1,  le=7,   description="运动幅度（1=静态，7=剧烈）")
    num_steps:    int         = Field(50,  ge=10, le=100, description="扩散步数，越多质量越高但越慢")
    seed:         Optional[int] = Field(None, description="随机种子，不填则随机")
    cond_type:    CondType    = Field(CondType.t2v, description="生成类型")


class JobStatus(str, Enum):
    pending    = "pending"
    processing = "processing"
    completed  = "completed"
    failed     = "failed"


class SubmitResponse(BaseModel):
    job_id: str
    message: str = "任务已提交"


class JobResponse(BaseModel):
    job_id:       str
    status:       JobStatus
    video_url:    Optional[str] = None
    error:        Optional[str] = None
    created_at:   Optional[str] = None
    completed_at: Optional[str] = None
