#!/usr/bin/env python3
from __future__ import annotations

import json
import os
import sys
from collections import defaultdict
from pathlib import Path

EVENTS = Path(os.environ.get("PI_TOOL_USAGE_FILE", "/home/sebas/runtime/tool-usage/events.jsonl"))

if not EVENTS.exists():
    print(f"events_file={EVENTS}")
    print("events=0")
    sys.exit(0)

stats: dict[str, dict[str, object]] = {}
recent_failures: list[dict[str, object]] = []
count = 0

with EVENTS.open() as fh:
    for line in fh:
        line = line.strip()
        if not line:
            continue
        try:
            event = json.loads(line)
        except Exception:
            continue
        count += 1
        name = str(event.get("name") or "unknown")
        s = stats.setdefault(name, {
            "count": 0,
            "succeeded": 0,
            "failed": 0,
            "cancelled": 0,
            "started": 0,
            "duration_sum": 0,
            "duration_count": 0,
        })
        s["count"] = int(s["count"]) + 1
        status = event.get("status")
        if status in ("succeeded", "failed", "cancelled", "started"):
            s[status] = int(s[status]) + 1
        dur = event.get("duration_ms")
        if isinstance(dur, int) and dur >= 0 and status in ("succeeded", "failed", "cancelled"):
            s["duration_sum"] = int(s["duration_sum"]) + dur
            s["duration_count"] = int(s["duration_count"]) + 1
        if status == "failed":
            recent_failures.append(event)

print(f"events_file={EVENTS}")
print(f"events={count}")
print("\nby_tool:")
for name in sorted(stats):
    s = stats[name]
    terminal = int(s["succeeded"]) + int(s["failed"]) + int(s["cancelled"])
    success_rate = (int(s["succeeded"]) / terminal * 100.0) if terminal else 0.0
    avg_ms = (int(s["duration_sum"]) / int(s["duration_count"])) if int(s["duration_count"]) else 0.0
    print(
        f"- {name}: count={s['count']} success={s['succeeded']} failed={s['failed']} "
        f"cancelled={s['cancelled']} started={s['started']} success_rate={success_rate:.1f}% avg_ms={avg_ms:.1f}"
    )

print("\nrecent_failures:")
for event in recent_failures[-10:]:
    print(
        f"- {event.get('ts')} {event.get('name')} cwd={event.get('cwd')} exit={event.get('exit_code')} "
        f"error={event.get('error_summary') or ''}"
    )
