#!/usr/bin/env bash
# fix-postmortem-p0.sh — 14.07.2026, Aria
#
# Setzt die Root-Teile der Post-Mortem-Maßnahmen um (P0-1, P1-3, P0-2 teilweise).
# Die aria-Seite ist schon erledigt (git-askpass.sh, aria-git-sync.sh, wrapper.sh,
# Hooks, Panel — alle mit Backups *.bak.20260714-postmortem).
#
# WAS DIESES SKRIPT TUT (bitte lesen):
#   1. GitHub-Token: kopiert die Zeile GITHUB_PERSONAL_ACCESS_TOKEN aus
#      /root/aria/.env nach /home/aria/.env (chmod 600) — NACH API-Validierung.
#      → Credentials-Kopie, deshalb steht es hier explizit.
#   2. aria-git-sync: Drop-in auf User=aria + /home/aria/scripts/aria-git-sync.sh.
#      Ab dann wird /home/aria/brain gesynct und die /root-Altwelt NICHT mehr
#      (gewollt — Einfrieren beginnt). Vorher wird der Zustand der Altwelt
#      protokolliert (unpushed Commits würden sonst stranden).
#   3. OnFailure-Alarm: aria.service bekommt OnFailure=aria-failure-notify@%n;
#      das Notify-Template lernt /home/aria-Pfade (Token-Suche).
#   4. DISABLE_AUTOUPDATER=1 für aria.service (greift beim nächsten natürlichen
#      Restart — dieses Skript startet aria.service NICHT neu, sonst stirbt
#      die laufende Session).
#   5. Test: git-sync einmal ausführen, Ergebnis zeigen.
#
# ALS ROOT AUSFÜHREN:  bash /home/aria/tools/fix-postmortem-p0.sh
set -uo pipefail

if [[ $EUID -ne 0 ]]; then echo "FEHLER: als root ausführen"; exit 1; fi

echo "== 0) Altwelt-Zustand protokollieren (Divergenz-Check) =="
if [[ -d /root/aria/brain/.git ]]; then
  echo "-- /root/aria/brain letzte Commits:"
  git -C /root/aria/brain log --oneline -3 2>/dev/null || true
  DIRTY=$(git -C /root/aria/brain status --porcelain 2>/dev/null | wc -l)
  AHEAD=$(git -C /root/aria/brain rev-list --count @{u}..HEAD 2>/dev/null || echo "?")
  echo "-- dirty files: $DIRTY | unpushed commits: $AHEAD"
  if [[ "$DIRTY" != "0" || ( "$AHEAD" != "0" && "$AHEAD" != "?" ) ]]; then
    echo "⚠ WARNUNG: Altwelt-Brain hat lokale/ungepushte Änderungen — NICHT löschen,"
    echo "  beim Altwelt-Sweep (KAR-956) manuell sichten."
  fi
fi

echo "== 1) GitHub-Token nach /home/aria/.env übernehmen =="
TOKEN_LINE=$(grep '^GITHUB_PERSONAL_ACCESS_TOKEN=' /root/aria/.env 2>/dev/null | head -1)
if [[ -z "$TOKEN_LINE" ]]; then
  echo "⚠ Kein GITHUB_PERSONAL_ACCESS_TOKEN in /root/aria/.env — Schritt übersprungen."
  echo "  Dann bitte neues PAT erzeugen (repo-Scope für KADiCon/aria-brain) und als"
  echo "  GITHUB_PERSONAL_ACCESS_TOKEN=... in /home/aria/.env eintragen."
else
  TOKEN_VALUE="${TOKEN_LINE#GITHUB_PERSONAL_ACCESS_TOKEN=}"
  LOGIN=$(curl -sm 10 -H "Authorization: Bearer ${TOKEN_VALUE}" https://api.github.com/user | grep -oP '"login":\s*"\K[^"]+' || true)
  if [[ -z "$LOGIN" ]]; then
    echo "⚠ Token aus /root/aria/.env ist UNGÜLTIG (API lehnt ab) — nichts kopiert."
    echo "  Bitte neues PAT erzeugen und in /home/aria/.env eintragen (Zeile wie oben)."
  else
    echo "Token gültig (Login: $LOGIN) — übernehme nach /home/aria/.env"
    if grep -q '^GITHUB_PERSONAL_ACCESS_TOKEN=' /home/aria/.env 2>/dev/null; then
      sed -i "s|^GITHUB_PERSONAL_ACCESS_TOKEN=.*|${TOKEN_LINE}|" /home/aria/.env
    else
      printf '\n# GitHub PAT fuer git-sync (uebernommen aus /root/aria/.env, 14.07.2026)\n%s\n' "$TOKEN_LINE" >> /home/aria/.env
    fi
    chown aria:aria /home/aria/.env; chmod 600 /home/aria/.env
  fi
fi

echo "== 2) aria-git-sync auf User aria + /home/aria umstellen =="
mkdir -p /etc/systemd/system/aria-git-sync.service.d
cat > /etc/systemd/system/aria-git-sync.service.d/override.conf <<'EOF'
# 14.07.2026 Post-Mortem P0-1 (Aria): Brain-Sync auf die aria-Welt.
# Ab jetzt wird /home/aria/brain gesynct; die /root-Altwelt bewusst nicht mehr.
[Service]
User=aria
Group=aria
ExecStart=
ExecStart=/home/aria/scripts/aria-git-sync.sh
EOF

echo "== 3) OnFailure-Alarm auf aria.service + Notify-Template mit /home-Pfaden =="
mkdir -p /etc/systemd/system/aria.service.d
cat > /etc/systemd/system/aria.service.d/postmortem.conf <<'EOF'
# 14.07.2026 Post-Mortem P1-3 + P0-2 (Aria):
# - OnFailure: sofortiger Telegram-Ping statt 10h stiller Crash-Loop/StartLimit-Tod
# - DISABLE_AUTOUPDATER: kein unbeaufsichtigtes Claude-Update mehr (Updates ab
#   jetzt bewusst + mit Canary-Test, siehe Post-Mortem Maßnahme P0-2)
# Greift beim nächsten natürlichen Restart von aria.service.
[Unit]
OnFailure=aria-failure-notify@%n.service
[Service]
Environment=DISABLE_AUTOUPDATER=1
EOF

# Template: Token-Suche lernt die /home/aria-Welt (vorne), /root bleibt Fallback
cat > /etc/systemd/system/aria-failure-notify@.service <<'EOF'
[Unit]
Description=Aria Failure-Notify — sofortiger Telegram-Ping wenn %i failed (KAR-877; /home-Pfade 14.07.2026 Post-Mortem)

[Service]
Type=oneshot
# Token wird zur Laufzeit gelesen: erst aria-Welt, dann root-Fallback; kein Secret in dieser Unit.
ExecStart=/bin/bash -c 'TOK=$(grep -oP "^TELEGRAM_BOT_TOKEN=\\K.*" /home/aria/.claude/channels/telegram/.env 2>/dev/null || grep -oP "^TELEGRAM_BOT_TOKEN=\\K.*" /home/aria/.env 2>/dev/null || grep -oP "^TELEGRAM_BOT_TOKEN=\\K.*" /root/.claude/channels/telegram/.env 2>/dev/null || grep -oP "^TELEGRAM_BOT_TOKEN=\\K.*" /root/aria/.env); LINE=$(journalctl -u "%i" -n 3 --no-pager -o cat 2>/dev/null | tail -1 | head -c 300); TEXT=$(printf "🔴 systemd-Unit FAILED: %i\\nLetzte Log-Zeile: %%s\\n(sofort-Eskalation via aria-failure-notify, KAR-877)" "$${LINE}"); curl -sm 10 "https://api.telegram.org/bot$${TOK}/sendMessage" --data-urlencode "chat_id=1164395546" --data-urlencode "text=$${TEXT}" >/dev/null'
EOF

echo "== 4) daemon-reload + git-sync Testlauf =="
systemctl daemon-reload
systemctl start aria-git-sync.service
sleep 5
echo "-- git-sync Log (neu unter /home/aria/logs/git-sync.log):"
tail -5 /home/aria/logs/git-sync.log 2>/dev/null || echo "(noch kein Log — pruefen: journalctl -u aria-git-sync)"
echo "-- /home/aria/brain nach Sync:"
git -C /home/aria/brain log --oneline -2
echo "-- uncommitted danach (soll 0 sein):"
git -C /home/aria/brain status --porcelain | wc -l

echo
echo "FERTIG. aria.service wurde NICHT neu gestartet (laufende Session bleibt);"
echo "OnFailure + DISABLE_AUTOUPDATER greifen ab dem nächsten Restart."
echo "Sag Aria kurz Bescheid — sie verifiziert den Push auf GitHub."
