#!/usr/bin/env python3
"""Local microbenchmark for the 3-scenario EPC v0.2 synthetic fixture."""
from __future__ import annotations
import json
import platform
import statistics
import time
from datetime import datetime, timezone
from pathlib import Path
from existence_possibility_compiler_v02 import compile_plan

ROOT = Path(__file__).resolve().parent
problem = json.loads((ROOT / "example_problem_v02.json").read_text(encoding="utf-8"))
clock = datetime(2026, 11, 3, 12, 0, tzinfo=timezone.utc)
warmups, rounds = 20, 300
for _ in range(warmups):
    compile_plan(problem, now=clock)
samples = []
for _ in range(rounds):
    start = time.perf_counter_ns()
    compile_plan(problem, now=clock)
    samples.append((time.perf_counter_ns() - start) / 1_000_000)

def pct(values, q):
    x = sorted(values)
    return x[min(len(x)-1, round((len(x)-1)*q))]

r = compile_plan(problem, now=clock)
result = {
    "benchmark": "Darkoza EPC v0.2 robust possibility planner",
    "measured_at_utc": datetime.now(timezone.utc).isoformat().replace("+00:00", "Z"),
    "python": platform.python_version(),
    "platform": platform.platform(),
    "warmup_runs": warmups,
    "measured_runs": rounds,
    "scenarios": len(problem["scenarios"]),
    "candidate_actions": len(problem["actions"]),
    "search_states": r["search"]["states_explored"],
    "latency_ms": {
        "median": round(statistics.median(samples), 4),
        "p95": round(pct(samples, .95), 4),
        "p99": round(pct(samples, .99), 4),
        "max": round(max(samples), 4)
    },
    "scope": "Local in-process latency only; excludes model inference, network, storage I/O, persistence, UI, contention and execution."
}
print(json.dumps(result, indent=2))
