from __future__ import annotations

from typing import Any


def _read_scene(scene: Any) -> tuple[str, str, str]:
    if hasattr(scene, "image_prompt") and hasattr(scene, "video_motion") and hasattr(scene, "narration"):
        return (
            str(getattr(scene, "image_prompt", "")).strip(),
            str(getattr(scene, "video_motion", "")).strip(),
            str(getattr(scene, "narration", "")).strip(),
        )
    if isinstance(scene, dict):
        return (
            str(scene.get("image_prompt", "")).strip(),
            str(scene.get("video_motion", scene.get("motion", ""))).strip(),
            str(scene.get("narration", scene.get("tts", ""))).strip(),
        )
    return ("", "", "")


def scenes_to_shots(scenes: list) -> list[dict[str, Any]]:
    shots: list[dict[str, Any]] = []
    for scene_idx, scene in enumerate(scenes, start=1):
        image_prompt, motion, tts = _read_scene(scene)
        scene_id = f"scene_{scene_idx:02d}"
        shot_id = f"{scene_id}_01"
        # Keep default duration simple and deterministic for MVP.
        duration = 3
        shots.append(
            {
                "shot_id": shot_id,
                "scene_id": scene_id,
                "duration": int(duration),
                "image_prompt": image_prompt,
                "motion": motion,
                "camera": "",
                "tts": tts,
                "status": "pending",
            }
        )
    return shots

