#!/usr/bin/env bash
# fix-dashboard-offline.sh — 14.07.2026, Aria
#
# Behebt "Aria · offline" im Control-Panel nach der root→aria User-Migration.
# Die beiden Python-Skripte (health-server.py, aria-chat-logger-sqlite.py)
# hat Aria bereits unter /home/aria/scripts/ gepatcht (Backups: *.bak.20260714-dashboard-fix).
# Dieses Skript macht die Teile, die root brauchen:
#
#   1. aria-chat-logger-sqlite als User aria laufen lassen (tmux capture braucht
#      denselben User wie die aria-Session), Pfade auf /home/aria
#   2. aria-health auf das gepatchte Skript unter /home/aria zeigen
#   3. ACL: User aria bekommt Lese+Schreibzugriff auf /root/projekte/aria-control
#      (damit Aria den Panel-Statuscheck selbst patchen kann) + execute-only auf
#      /root und /root/projekte (nur Traversal, kein Listing)
#   4. Sudo-Regel: aria darf GENAU diese Services restarten (nichts anderes):
#      aria-control-v3, aria-health, aria-chat-logger-sqlite
#   5. Services neu starten + Health-Check
#
# ALS ROOT AUSFÜHREN:  bash /home/aria/tools/fix-dashboard-offline.sh
set -euo pipefail

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

echo "== Vorab-Check: /root/aria und /home/aria derselbe Baum? =="
readlink -f /root/aria || true
if [[ "$(readlink -f /root/aria)" != "/home/aria" ]]; then
  echo "WARNUNG: /root/aria ist KEIN Symlink auf /home/aria — bitte Aria Bescheid geben."
  echo "Skript läuft trotzdem weiter (Overrides zeigen explizit auf /home/aria)."
fi

echo "== 1) aria-chat-logger-sqlite: User=aria + /home/aria-Pfade =="
mkdir -p /etc/systemd/system/aria-chat-logger-sqlite.service.d
cat > /etc/systemd/system/aria-chat-logger-sqlite.service.d/override.conf <<'EOF'
# 14.07.2026 Dashboard-offline-Fix (Aria): Aria-Session läuft als User aria,
# tmux capture-pane funktioniert nur im selben User. Pfade auf /home/aria.
[Service]
User=aria
Group=aria
ExecStart=
ExecStart=/usr/bin/python3 -u /home/aria/scripts/aria-chat-logger-sqlite.py
EnvironmentFile=
EnvironmentFile=-/home/aria/scripts/.env.aria
Environment=ARIA_DB_PATH=/home/aria/.aria-chat.db
Environment=ARIA_SESSION_BACKUP=/home/aria/.aria-last-session.txt
EOF
chown aria:aria /home/aria/.aria-chat.db 2>/dev/null || true

echo "== 2) aria-health: gepatchtes Skript unter /home/aria =="
mkdir -p /etc/systemd/system/aria-health.service.d
cat > /etc/systemd/system/aria-health.service.d/override.conf <<'EOF'
# 14.07.2026 Dashboard-offline-Fix (Aria): Skript-Pfad explizit auf /home/aria.
[Service]
ExecStart=
ExecStart=/usr/bin/python3 /home/aria/scripts/health-server.py
EOF

echo "== 3) ACL: aria darf Panel-Code lesen+schreiben =="
command -v setfacl >/dev/null || apt-get install -y acl
setfacl -m u:aria:--x /root
setfacl -m u:aria:--x /root/projekte
setfacl -R  -m u:aria:rwX /root/projekte/aria-control
setfacl -Rd -m u:aria:rwX /root/projekte/aria-control

echo "== 4) Sudo-Regel (eng begrenzt auf 3 Service-Restarts) =="
cat > /etc/sudoers.d/aria-panel <<'EOF'
# 14.07.2026 Dashboard-offline-Fix: Aria darf genau diese Services restarten.
aria ALL=(root) NOPASSWD: /usr/bin/systemctl restart aria-control-v3.service, /usr/bin/systemctl restart aria-health.service, /usr/bin/systemctl restart aria-chat-logger-sqlite.service
EOF
chmod 440 /etc/sudoers.d/aria-panel
visudo -c -f /etc/sudoers.d/aria-panel

echo "== 5) Restart + Check =="
systemctl daemon-reload
systemctl restart aria-chat-logger-sqlite.service aria-health.service
sleep 3
systemctl --no-pager --quiet is-active aria-chat-logger-sqlite.service && echo "chat-logger: aktiv" || echo "chat-logger: FEHLER (journalctl -u aria-chat-logger-sqlite)"
systemctl --no-pager --quiet is-active aria-health.service && echo "health: aktiv" || echo "health: FEHLER (journalctl -u aria-health)"
curl -s -m 10 http://127.0.0.1:9090/health/full || echo "health-endpoint antwortet nicht"
echo
echo "FERTIG. Sag Aria Bescheid — sie patcht dann selbst den Statuscheck in aria-control-v3 und verifiziert das Dashboard."
