#!/usr/bin/env python3
"""Iteration-Limit-Hook gegen Endlos-Validator-Loops.

Wird als pre-tool-use oder pre-validator Hook aufgerufen. Zaehlt pro
Session+Validator wie oft schon ausgeloest, blockt nach N Iterationen.

State in /root/aria/state/validator-iterations.json:
  {"<session-id>:<validator-name>": <count>}

Usage:
    iteration_limit.py --session-id $CLAUDE_SESSION_ID --validator markdown_frontmatter --max 3

Exit-Codes:
    0 = under limit, OK to proceed
    2 = limit exceeded (block)
"""
import argparse
import json
import os
import sys
from pathlib import Path

# 14.07.2026 Post-Mortem-Fix: /home/aria statt /root/aria (User-Migration)
STATE_FILE = Path("/home/aria/state/validator-iterations.json")


def load_state() -> dict[str, int]:
    if not STATE_FILE.is_file():
        return {}
    try:
        return json.loads(STATE_FILE.read_text(encoding="utf-8"))
    except (OSError, json.JSONDecodeError):
        return {}


def save_state(state: dict[str, int]) -> None:
    STATE_FILE.parent.mkdir(parents=True, exist_ok=True)
    STATE_FILE.write_text(json.dumps(state, indent=2), encoding="utf-8")


def main() -> int:
    ap = argparse.ArgumentParser()
    ap.add_argument("--session-id", default=os.environ.get("CLAUDE_SESSION_ID", "unknown"))
    ap.add_argument("--validator", required=True)
    ap.add_argument("--max", type=int, default=3)
    ap.add_argument("--reset", action="store_true",
                    help="Reset counter for this session+validator")
    args = ap.parse_args()

    key = f"{args.session_id}:{args.validator}"
    state = load_state()

    if args.reset:
        state.pop(key, None)
        save_state(state)
        print(json.dumps({"status": "reset", "key": key}))
        return 0

    current = state.get(key, 0) + 1
    state[key] = current
    save_state(state)

    if current > args.max:
        sys.stderr.write(json.dumps({
            "status": "block",
            "validator": args.validator,
            "iterations": current,
            "max": args.max,
            "message": f"Validator '{args.validator}' lief {current}x in Session — Limit {args.max} ueberschritten. Eskaliere an Kais oder pause.",
        }, indent=2))
        sys.stderr.write("\n")
        return 2

    print(json.dumps({"status": "ok", "validator": args.validator, "iterations": current, "max": args.max}))
    return 0


if __name__ == "__main__":
    sys.exit(main())
