"""Demo CLI for V2 review batches. No media, sends, or platform calls."""

from __future__ import annotations

import argparse
import json
import sys
from typing import Sequence, TextIO

from autoshorts.review.workflow_v2 import ReviewBatchV2, build_review_batch_v2
from autoshorts.strategy.spine_v2 import build_demo_candidates_v2, render_review_package_v2


def build_demo_review_batch_v2(*, limit: int = 3) -> ReviewBatchV2:
    return build_review_batch_v2(build_demo_candidates_v2(limit=min(limit, 3)))


def _batch_to_dict(batch: ReviewBatchV2) -> dict[str, object]:
    return {
        "ready_for_review": [item.review_package.to_dict() for item in batch.ready_for_review if item.review_package is not None],
        "blocked": [{"candidate_id": item.candidate.candidate_id, "reasons": list(item.reasons), "score": item.score.to_dict()} for item in batch.blocked],
        "invalid": [{"candidate_id": item.candidate.candidate_id, "reasons": list(item.reasons), "score": item.score.to_dict()} for item in batch.invalid],
        "side_effects": list(batch.side_effects),
        "external_calls": list(batch.external_calls),
    }


def main(argv: Sequence[str] | None = None, *, stdout: TextIO | None = None) -> int:
    parser = argparse.ArgumentParser(description="Render a side-effect-free V2 review batch demo.")
    parser.add_argument("--json", action="store_true", help="Emit deterministic JSON instead of text")
    parser.add_argument("--limit", type=int, default=3, help="Max demo candidates, capped at 3")
    args = parser.parse_args(argv)
    out = stdout or sys.stdout
    batch = build_demo_review_batch_v2(limit=args.limit)
    if args.json:
        print(json.dumps(_batch_to_dict(batch), ensure_ascii=False, separators=(",", ":")), file=out)
    else:
        print("V2 Review Batch Demo", file=out)
        print("Side effects: none", file=out)
        print("External calls: none", file=out)
        for item in batch.ready_for_review:
            if item.review_package is not None:
                print("\n---", file=out)
                print(render_review_package_v2(item.review_package), file=out)
        for group_name, items in (("Blocked", batch.blocked), ("Invalid", batch.invalid)):
            if items:
                print(f"\n{group_name}:", file=out)
                for item in items:
                    print(f"- {item.candidate.candidate_id}: {'; '.join(item.reasons)}", file=out)
    return 0


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