from enum import Enum
from typing import Optional
from pydantic import BaseModel, Field


class VideoMode(str, Enum):
    SHORTS = "shorts"
    FULL = "full"


class Difficulty(str, Enum):
    EASY = "easy"
    MEDIUM = "medium"
    HARD = "hard"


class QuizItem(BaseModel):
    anime: str = Field(..., description="Anime title")
    opening_file: str = Field(..., description="Filename of the opening audio")
    start_time: float = Field(0, description="Start time in seconds for audio clip")
    difficulty: Difficulty = Difficulty.MEDIUM
    poster: Optional[str] = Field(None, description="Poster image filename")


class GenerateRequest(BaseModel):
    mode: VideoMode = VideoMode.SHORTS
    questions: list[QuizItem] = Field(..., min_length=1, max_length=20)
    audio_duration: float = Field(3.0, ge=1.0, le=10.0, description="Audio clip duration in seconds")
    background_video: Optional[str] = Field(None, description="Background video filename")
    transition_sound: Optional[str] = Field(None, description="Transition sound filename")
    continue_audio: bool = Field(False, description="Continue audio from where question ended instead of restarting")


class GenerateResponse(BaseModel):
    success: bool
    video_url: Optional[str] = None
    filename: Optional[str] = None
    error: Optional[str] = None


class ProgressResponse(BaseModel):
    status: str
    progress: float
    message: str


class ContentListResponse(BaseModel):
    audio_files: list[str]
    background_videos: list[str]
    posters: list[str]
    transition_sounds: list[str]
