#!/usr/bin/env python3
"""Build a compact transition-progress review summary from candidate browser smoke."""
from __future__ import annotations

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


ROOT = Path(__file__).resolve().parents[1]
OUT = ROOT / "out"
SOURCE_FILE = "candidate_transition_progress_browser_smoke.json"


def load_json(path: Path) -> dict[str, Any]:
    return json.loads(path.read_text(encoding="utf-8")) if path.exists() else {}


def build_summary(root: Path = ROOT) -> dict[str, Any]:
    out_dir = root / "out"
    path = out_dir / SOURCE_FILE
    payload = load_json(path)
    transition = {key: value for key, value in payload.items() if key != "snapshots"}
    transition["sourceFile"] = f"out/{SOURCE_FILE}"
    compact_size = len(json.dumps(transition, ensure_ascii=False, separators=(",", ":")).encode("utf-8"))
    return {
        "kind": "hwanse-transition-progress-candidate-review-summary",
        "source": "tools/summarize_transition_progress_candidate_review.py",
        "status": "ready",
        "sourceFile": f"out/{SOURCE_FILE}",
        "boundary": (
            "Compact browser transition-progress review contract. It keeps the "
            "top-level confirmed-transition, objective, restore, title-restore, "
            "and movement-transition smoke strings used by completion audit/build "
            "surfaces, while dropping raw browser snapshots. Raw transition "
            "progress smoke remains a domain-summary and verifier input until "
            "those consumers are consolidated."
        ),
        "sourceSizeBytes": path.stat().st_size if path.exists() else 0,
        "compactSizeBytes": compact_size,
        "transition": transition,
    }


def write_outputs(summary: dict[str, Any], out_dir: Path = OUT) -> None:
    out_dir.mkdir(parents=True, exist_ok=True)
    (out_dir / "transition_progress_candidate_review_summary.json").write_text(
        json.dumps(summary, ensure_ascii=False, indent=2) + "\n",
        encoding="utf-8",
    )


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("--root", type=Path, default=ROOT)
    args = parser.parse_args()
    root = args.root.resolve()
    write_outputs(build_summary(root), root / "out")


if __name__ == "__main__":
    main()
