#!/usr/bin/env bash
# TrinityAdmin: Steuerung des lokal installierten Panels (liegt im Installationsordner)
set -u
DIR="$(cd "$(dirname "$(readlink -f "$0")")" && pwd)"
ENVF="$DIR/panel.env"
PID="$DIR/panel.pid"
LOG="$DIR/panel.log"
[ -f "$ENVF" ] || { echo "Fehlt: $ENVF (Installation unvollständig)"; exit 1; }

NODE="$DIR/node/bin/node"; [ -x "$NODE" ] || NODE="$(command -v node)"
load_env() { set -a; . "$ENVF"; set +a; }
running() { [ -f "$PID" ] && kill -0 "$(cat "$PID")" 2>/dev/null; }

case "${1:-}" in
  start)
    running && { echo "Läuft bereits (PID $(cat "$PID"))."; exit 0; }
    load_env; cd "$DIR/app"
    nohup "$NODE" src/server.js >> "$LOG" 2>&1 &
    echo $! > "$PID"; sleep 2
    running && echo "Gestartet. Link: $PUBLIC_URL/" || { echo "Start fehlgeschlagen, siehe: $0 logs"; exit 1; }
    ;;
  stop)
    if running; then kill "$(cat "$PID")"; rm -f "$PID"; echo "Gestoppt."; else echo "Läuft nicht."; fi
    ;;
  restart) "$0" stop; sleep 1; "$0" start ;;
  status)
    if running; then echo "läuft (PID $(cat "$PID"))"; else echo "gestoppt"; fi
    load_env; echo "Link: $PUBLIC_URL/   Daten: $DATA_DIR"
    ;;
  info)
    load_env; cd "$DIR/app"; "$NODE" src/cli.js info
    ;;
  logs) tail -n "${2:-80}" -f "$LOG" ;;
  autostart)
    # beim Neustart des Rechners automatisch starten (ohne Root: Crontab des aktuellen Benutzers)
    command -v crontab >/dev/null || { echo "crontab nicht gefunden. Starte '$0 start' manuell oder richte einen systemd-Dienst ein."; exit 1; }
    ( crontab -l 2>/dev/null | grep -v "$DIR/trinityadmin start"; echo "@reboot $DIR/trinityadmin start >/dev/null 2>&1" ) | crontab -
    echo "Autostart eingetragen."
    ;;
  update)
    # neues Paket (tar.gz) einspielen: trinityadmin update <paket.tar.gz>
    [ -f "${2:-}" ] || { echo "Aufruf: $0 update <trinityadmin.tar.gz>"; exit 1; }
    T="$(mktemp -d)"; tar xzf "$2" -C "$T"
    "$0" stop
    rm -rf "$DIR/app/src" "$DIR/app/public" "$DIR/app/agent"
    cp -r "$T"/trinityadmin/panel/src "$T"/trinityadmin/panel/public "$T"/trinityadmin/panel/agent "$T"/trinityadmin/panel/package.json "$DIR/app/"
    ( cd "$DIR/app" && PATH="$(dirname "$NODE"):$PATH" "$(dirname "$NODE")/npm" install --omit=dev --silent )
    cp "$T"/trinityadmin/standalone/trinityadmin "$DIR/trinityadmin"; chmod +x "$DIR/trinityadmin"
    cp "$DIR/app/agent/trinityadmin.lua" "$(grep '^TA_GMOD_DIR=' "$ENVF" | cut -d= -f2-)/addons/trinityadmin/lua/autorun/trinityadmin.lua"
    rm -rf "$T"; "$DIR/trinityadmin" start
    echo "Aktualisiert. Der GMod-Server muss neu gestartet werden, damit der neue Agent geladen wird."
    ;;
  *)
    cat <<'EOT'
TrinityAdmin (lokal)
  trinityadmin start | stop | restart | status
  trinityadmin info          Link, Benutzer und Erstpasswort anzeigen
  trinityadmin logs [n]      Panel-Log
  trinityadmin autostart     Panel beim Rechnerstart automatisch starten
  trinityadmin update <tar>  neue Version einspielen
EOT
    ;;
esac
