#!/usr/bin/env bash
# Leitstelle – ESX Admin Panel: Update einer bestehenden Installation
#
# Neue Version in einen eigenen Ordner entpacken und von dort aus starten:
#   sudo ./update.sh /opt/leitstelle
#
# Behalten werden: config.json, .env, audit.jsonl, data/, backups/, eigene Dateien in public/ (z. B. map.jpg)
# und deine config.lua der FiveM-Resource.
# Vorher wird ein Backup der alten Programmdateien unter <ziel>/backups/ angelegt.
set -euo pipefail

SRC="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DST="${1:-}"
NAME=leitstelle
if [ -z "$DST" ]; then echo "Aufruf: sudo ./update.sh /pfad/zur/bestehenden/installation"; exit 1; fi
DST="$(cd "$DST" && pwd)"
if [ "$SRC" = "$DST" ]; then echo "Bitte die neue Version in einen ANDEREN Ordner entpacken und update.sh von dort starten."; exit 1; fi
if [ ! -f "$DST/server.js" ]; then echo "In $DST ist keine Installation der Leitstelle."; exit 1; fi

OLDV="$(node -p "require('$DST/package.json').version" 2>/dev/null || echo '?')"
NEWV="$(node -p "require('$SRC/package.json').version")"
echo "Update $OLDV → $NEWV in $DST"

STAMP="$(date +%Y%m%d-%H%M%S)"
mkdir -p "$DST/backups"
tar -czf "$DST/backups/leitstelle-$OLDV-$STAMP.tar.gz" -C "$DST" \
  --exclude=./node_modules --exclude=./backups --exclude=./audit.jsonl .
chmod 600 "$DST/backups/leitstelle-$OLDV-$STAMP.tar.gz"
echo "Backup: $DST/backups/leitstelle-$OLDV-$STAMP.tar.gz"

RUNNING=0
if command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet $NAME 2>/dev/null; then RUNNING=1; systemctl stop $NAME; fi

# Programmdateien kopieren, Benutzerdaten auslassen
for f in server.js extras.js extras2.js extras3.js env.js create-admin.js package.json package-lock.json README.md CHANGELOG.md .env.example .gitignore \
         install.sh update.sh uninstall.sh start.sh install.bat start.bat; do
  [ -f "$SRC/$f" ] && cp -f "$SRC/$f" "$DST/$f"
done
# public/: nur mitgelieferte Dateien ersetzen, eigene Dateien (z. B. map.jpg) bleiben erhalten
mkdir -p "$DST/public"
cp -f "$SRC"/public/* "$DST/public/"
rm -rf "$DST/tools" "$DST/docs"
cp -r "$SRC/tools" "$SRC/docs" "$DST/"
# FiveM-Resource: config.lua der bestehenden Installation behalten
mkdir -p "$DST/fivem/leitstelle_bridge"
for f in fxmanifest.lua server.lua README.md; do cp -f "$SRC/fivem/leitstelle_bridge/$f" "$DST/fivem/leitstelle_bridge/$f"; done
[ -f "$DST/fivem/leitstelle_bridge/config.lua" ] || cp "$SRC/fivem/leitstelle_bridge/config.lua" "$DST/fivem/leitstelle_bridge/config.lua"
chmod +x "$DST"/*.sh

cd "$DST"
npm ci --omit=dev --no-audit --no-fund

if id leitstelle >/dev/null 2>&1 && [ "$(id -u)" = 0 ]; then chown -R leitstelle:leitstelle "$DST"; fi

if [ "$RUNNING" = 1 ]; then systemctl start $NAME; echo "Dienst neu gestartet."; else echo "Panel jetzt neu starten (./start.sh oder pm2 restart leitstelle)."; fi
echo "Fertig: Version $NEWV. Im Browser einmal mit Strg+F5 neu laden."
echo "Hinweis: Hat sich fivem/leitstelle_bridge geändert, die Dateien auch auf den FiveM-Server kopieren und die Resource neu starten."
