#!/usr/bin/env python3
"""Build a compact event/object 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_event_object_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)
    event_object = {key: value for key, value in payload.items() if key != "snapshots"}
    event_object["sourceFile"] = f"out/{SOURCE_FILE}"
    compact_size = len(json.dumps(event_object, ensure_ascii=False, separators=(",", ":")).encode("utf-8"))
    return {
        "kind": "hwanse-event-object-candidate-review-summary",
        "source": "tools/summarize_event_object_candidate_review.py",
        "status": "ready",
        "sourceFile": f"out/{SOURCE_FILE}",
        "boundary": (
            "Compact browser event/object review contract. It keeps the top-level "
            "object, collision, linked-dialogue, and linked-battle smoke strings used "
            "by completion audit/build surfaces, while dropping raw browser snapshots. "
            "Raw event/object 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,
        "eventObject": event_object,
    }


def write_outputs(summary: dict[str, Any], out_dir: Path = OUT) -> None:
    out_dir.mkdir(parents=True, exist_ok=True)
    (out_dir / "event_object_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()
