#!/usr/bin/env python3
"""Stellt sicher, dass ein Worker-Profil die Agent-Hooks kennt (Faden 8, 13.07.2026).

Kanban-Worker laufen unter IHREM Profil (HERMES_HOME=~/.hermes/profiles/<name>) und lesen
dessen config.yaml — NICHT die Top-Level ~/.hermes/config.yaml. Die worker-relevanten Hooks
(box-steckbrief-inject = Box-Wissen, tabu-pfade-guard = Schreibschutz) muessen also in JEDER
Worker-Profil-config.yaml stehen, sonst feuern sie fuer Worker nie (Bug-Fund 13.07.).

Idempotent + validiert + Backup. Setzt einen bestehenden `pre_verify`-Hook-Block als Anker
voraus (haben alle von default/werkstatt geklonten Profile); fehlt er, wird sauber
uebersprungen (exit 0), damit deploy.sh nicht bricht. Arg: Pfad zur Profil-config.yaml.
"""
import sys
import os
import datetime
import shutil

try:
    import yaml
except Exception:
    print("  (PyYAML fehlt — ensure-profile-hooks uebersprungen)")
    sys.exit(0)

AH = os.path.expanduser("~/.hermes/agent-hooks")
WANT = {
    "pre_llm_call": f"{AH}/box-steckbrief-inject.sh",
    "pre_tool_call": f"{AH}/tabu-pfade-guard.py",
}

if len(sys.argv) < 2:
    print("  usage: ensure-profile-hooks.py <config.yaml>")
    sys.exit(0)

p = sys.argv[1]
if not os.path.isfile(p):
    sys.exit(0)

txt = open(p, encoding="utf-8").read()

anchor = ("  pre_verify:\n"
          f"  - command: {AH}/pre-verify-gates.sh\n"
          "    timeout: 60\n")
if txt.count(anchor) != 1:
    print(f"  [{os.path.basename(os.path.dirname(p))}] kein eindeutiger pre_verify-Anker — SKIP")
    sys.exit(0)

add = ""
for event, cmd in WANT.items():
    if cmd not in txt:
        add += f"  {event}:\n  - command: {cmd}\n    timeout: 10\n"

if not add:
    print(f"  [{os.path.basename(os.path.dirname(p))}] Hooks schon registriert.")
    sys.exit(0)

new = txt.replace(anchor, anchor + add, 1)
try:
    d = yaml.safe_load(new)
    h = d["hooks"]
    for event, cmd in WANT.items():
        assert any(cmd in x.get("command", "") for x in h.get(event, []))
    assert any("pre-verify-gates.sh" in x.get("command", "") for x in h["pre_verify"])
except Exception as exc:
    print(f"  [{p}] Validierung fehlgeschlagen ({exc}) — config UNVERAENDERT.")
    sys.exit(0)

bak = p + ".bak-hooks-" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
shutil.copy2(p, bak)
tmp = p + ".tmp-hooks"
open(tmp, "w", encoding="utf-8").write(new)
os.replace(tmp, p)
print(f"  [{os.path.basename(os.path.dirname(p))}] Hooks ergaenzt (Backup {os.path.basename(bak)}).")
