"""엔티티 및 씬 스틸 API 스키마."""

from typing import Optional

from pydantic import BaseModel


class EntityResponse(BaseModel):
    id: str
    entity_type: str
    name: str
    description: Optional[str] = None
    stable_traits: str
    t2i_prompt: Optional[str] = None
    status: str
    episode_count: int = 0
    created_at: str

    model_config = {"from_attributes": True}


class EntityDetailResponse(EntityResponse):
    aliases: list[str] = []
    relations: list[dict] = []
    episodes: list[dict] = []


class EntityUpdate(BaseModel):
    name: Optional[str] = None
    description: Optional[str] = None
    stable_traits: Optional[str] = None
    t2i_prompt: Optional[str] = None


class SceneStillUpdate(BaseModel):
    still_frame_prompt: Optional[str] = None
    beat_title: Optional[str] = None
    camera_json: Optional[str] = None
    lighting_json: Optional[str] = None
    visible_entities_json: Optional[str] = None
    t2i_prompt_cinematic: Optional[str] = None
    t2i_prompt_closeup: Optional[str] = None
    dependent_scene_id: Optional[str] = None


class SceneStillResponse(BaseModel):
    id: str
    episode_id: str
    still_index: int
    screenplay_scene_heading: Optional[str] = None
    beat_title: Optional[str] = None
    still_frame_prompt: Optional[str] = None
    camera_json: str
    lighting_json: str
    visible_entities_json: str
    t2i_prompt_cinematic: Optional[str] = None
    t2i_prompt_closeup: Optional[str] = None
    t2i_variations_json: Optional[str] = None
    t2i_composer_version: Optional[str] = None
    segment_start_char: Optional[int] = None
    segment_end_char: Optional[int] = None
    variation_a_type: Optional[str] = None
    variation_a_angle: Optional[str] = None
    variation_a_color: Optional[str] = None
    variation_a_reason: Optional[str] = None
    variation_b_type: Optional[str] = None
    variation_b_angle: Optional[str] = None
    variation_b_color: Optional[str] = None
    variation_b_reason: Optional[str] = None
    recommended_variant: Optional[str] = None
    selected_variant: Optional[str] = None
    dependent_scene_id: Optional[str] = None
    status: str
    created_at: str

    model_config = {"from_attributes": True}
