#!/usr/bin/env python3
"""Build a compact save-point 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_save_point_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)
    save_point = {key: value for key, value in payload.items() if key != "snapshots"}
    save_point["sourceFile"] = f"out/{SOURCE_FILE}"
    compact_size = len(json.dumps(save_point, ensure_ascii=False, separators=(",", ":")).encode("utf-8"))
    return {
        "kind": "hwanse-save-point-candidate-review-summary",
        "source": "tools/summarize_save_point_candidate_review.py",
        "status": "ready",
        "sourceFile": f"out/{SOURCE_FILE}",
        "boundary": (
            "Compact browser save-point review contract. It keeps the top-level "
            "global/current/action/title-restore smoke strings used by completion "
            "audit/build surfaces, while dropping raw browser snapshots. Raw "
            "save-point 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,
        "savePoint": save_point,
    }


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