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

from typing import Optional

from pydantic import BaseModel


class EntityResponse(BaseModel):
    id: str
    short_id: Optional[str] = None
    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
    scene_summary: Optional[str] = None
    shot_type_1: Optional[str] = None
    shot_type_2: Optional[str] = None
    scene_index: Optional[int] = None
    shot_index: Optional[int] = None
    shot_description: Optional[str] = None
    based_on_beat: Optional[int] = None
    is_selected: Optional[bool] = True
    image_generated: Optional[bool] = False
    status: str
    created_at: str

    model_config = {"from_attributes": True}
