#!/usr/bin/env python3
"""Pinned S1 mention-ledger extractor entry point.

Usage:
    python3 recoil/pipeline/tools/breakdown_extract_cli.py --project tartarus --episode 1 [--dry-run]
"""

from __future__ import annotations

import argparse
import sys
from pathlib import Path


_REPO_ROOT = Path(__file__).resolve().parents[3]
if str(_REPO_ROOT) not in sys.path:
    sys.path.insert(0, str(_REPO_ROOT))

from recoil.pipeline._lib.breakdown_extract import (  # noqa: E402
    BreakdownExtractError,
    extract_mention_ledger,
)


def main(argv: list[str] | None = None) -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--project", required=True)
    parser.add_argument("--episode", required=True, type=int)
    parser.add_argument("--dry-run", action="store_true")
    args = parser.parse_args(argv)

    try:
        ledger = extract_mention_ledger(
            args.project,
            args.episode,
            write=not args.dry_run,
        )
    except BreakdownExtractError as exc:
        print(f"breakdown_extract failed: {exc}", file=sys.stderr)
        return 1

    scene_count = len(ledger.get("scenes", []))
    mention_count = sum(len(scene.get("mentions", [])) for scene in ledger.get("scenes", []))
    carried = sum(1 for scene in ledger.get("scenes", []) if scene.get("carried_forward"))
    prefix = "DRY-RUN " if args.dry_run else ""
    print(
        f"{prefix}mention_ledger project={args.project} episode={args.episode:03d} "
        f"scenes={scene_count} mentions={mention_count} carried_forward={carried}"
    )
    if args.dry_run:
        print("writes=0")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
