#!/usr/bin/env python3
"""Write a compact Markdown summary of extracted scene event candidates."""
from __future__ import annotations

import argparse
import json
from pathlib import Path


def summarize(events: list[dict]) -> str:
    lines = [
        "# Scene Event Candidates",
        "",
        "| map | scene | kind | active points | in-bounds/raw points | dispatch refs | linked | block kinds | record |",
        "| --- | --- | --- | ---: | --- | ---: | --- | --- | --- |",
    ]
    for event in events:
        block_kinds = sorted(
            {
                block.get("blockKind", "?")
                for block in event.get("tailPointerBlocks", [])
            }
        )
        raw_count = event.get("rawPointCount", len(event["points"]))
        in_bounds_count = event.get("inBoundsPointCount", len(event.get("inBoundsPoints", event["points"])))
        point_text = (
            str(in_bounds_count)
            if raw_count == in_bounds_count
            else f"{in_bounds_count}/{raw_count} in-bounds"
        )
        active_points = event.get("activePoints", event.get("points", []))
        lines.append(
            "| {map} | {scene} | {kind} | {active_points} | {points} | {dispatch_refs} | {linked} | {blocks} | `{record}` |".format(
                map=event["map"],
                scene=event["sceneIdHex"],
                kind=event["eventKind"],
                active_points=len(active_points),
                points=point_text,
                dispatch_refs=len(event.get("eventDispatchRefs", [])),
                linked=", ".join(event.get("linkedStrings", [])) or "-",
                blocks=", ".join(block_kinds) or "-",
                record=f"0x{event['recordVa']:08x}",
            )
        )
    lines.append("")
    return "\n".join(lines)


def main() -> None:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--events", type=Path, default=Path("out/scene_events.json"))
    parser.add_argument("--out", type=Path, default=Path("out/scene_events_summary.md"))
    args = parser.parse_args()

    events = json.loads(args.events.read_text(encoding="utf-8"))
    args.out.parent.mkdir(parents=True, exist_ok=True)
    args.out.write_text(summarize(events), encoding="utf-8")
    print(f"wrote {len(events)} event summaries -> {args.out}")


if __name__ == "__main__":
    main()
