#!/usr/bin/env python3
from __future__ import annotations

import argparse
import json
from pathlib import Path
from typing import Any


def read_text_if_exists(path: Path) -> str:
    return path.read_text().strip() if path.exists() else ""


def prompt_summary(seed: dict[str, Any]) -> list[str]:
    season = seed.get("season", {})
    lines = [
        f"Series: {seed.get('series', {}).get('title', 'Totally Spies!')}",
        f"Season focus: season {season.get('number', 7)}",
        f"Default season-7 setting: {season.get('default_setting', 'Singapore')}",
        "Main trio visual shorthand: Sam=redhead, Clover=blonde, Alex=brunette when clearly supported.",
        "Season-7 support: Zerlina leads WOOHP, Toby runs gadgets, Mandy returns, Cyberchac is a masked high-tech villain.",
        "Use canon names only when transcript or visuals support them strongly.",
    ]
    return lines


def main() -> None:
    parser = argparse.ArgumentParser(description="Build a structured story bible from repo-owned seed/reference inputs")
    parser.add_argument("--seed", required=True, type=Path)
    parser.add_argument("--source-notes", type=Path)
    parser.add_argument("--provided-context-dir", type=Path)
    parser.add_argument("--output", required=True, type=Path)
    args = parser.parse_args()

    seed = json.loads(args.seed.read_text())

    provided_context = {}
    if args.provided_context_dir:
        provided_context = {
            "details": read_text_if_exists(args.provided_context_dir / "details.txt"),
            "relevant_excerpt": read_text_if_exists(args.provided_context_dir / "relevant_excerpt.txt"),
        }

    alias_index = []
    for bucket in ["characters", "organizations", "locations", "gadget_families"]:
        for item in seed.get(bucket, []):
            for alias in item.get("aliases", [item.get("name")]):
                if alias:
                    alias_index.append({
                        "alias": alias,
                        "alias_lower": alias.lower(),
                        "bucket": bucket,
                        "id": item.get("id"),
                        "name": item.get("name"),
                    })

    payload = {
        **seed,
        "source_notes_path": str(args.source_notes) if args.source_notes else None,
        "source_notes": read_text_if_exists(args.source_notes) if args.source_notes else "",
        "provided_context": provided_context,
        "prompt_summary": prompt_summary(seed),
        "alias_index": alias_index,
    }

    args.output.parent.mkdir(parents=True, exist_ok=True)
    args.output.write_text(json.dumps(payload, indent=2) + "\n")
    print(f"Wrote story bible to {args.output}")


if __name__ == "__main__":
    main()
