#!/bin/bash
# ============================================================================
# TESM — Update/Reinstall (Bootstrapper)
# Lädt ein gepacktes Gitea-Release per HTTP herunter (kein "git clone"
# nötig) und übergibt die eigentliche Installations-/Update-Logik an
# install.sh aus dem Paket -- das erkennt selbstständig, ob unter
# /srv/tesm schon eine Installation existiert, und aktualisiert sie
# entsprechend (In-Place bei unverändertem Datenbank-Schema, sonst mit
# automatischem Backup + Migrations-Sicherheitsnetz samt Rückroll-
# Möglichkeit -- siehe install.sh für Details).
#
# Dieses Skript ist reiner Bootstrapper: Download + Entpacken + Aufruf von
# install.sh. Die frühere Sonderbehandlung zweier TESM vorausgehender
# Installationsstufen (rpi-check.service aus dem ursprünglichen reinen
# Bash-Setup, poe_web.service/poe_manager als Flask-Vorgänger von TESM)
# wurde entfernt -- diese Stufen sind auf allen aktuellen Installationen
# längst migriert, die dazugehörigen Unit-Dateien wurden dort manuell
# entfernt. Ein heute noch unmigriertes System wäre ohnehin so alt, dass
# ein manueller Blick vor dem Update angebracht ist statt automatischer
# stillschweigender Bereinigung.
#
# Auszuführen als root auf dem Zielsystem:
#   sudo ./update.sh
# Optional übersteuerbar (z.B. für eine bestimmte Version statt "latest"):
#   TESM_RELEASE_TAG=v1.0.0 sudo -E ./update.sh
# Für ein privates Repo wird ein Zugriffstoken benötigt:
#   TESM_GITEA_USER=alientim TESM_GITEA_TOKEN=<token> sudo -E ./update.sh
# ============================================================================
set -e

GITEA_BASE="${TESM_GITEA_BASE:-https://gitea.int.eertmoed.net}"
REPO_OWNER="${TESM_REPO_OWNER:-alientim}"
REPO_NAME="${TESM_REPO_NAME:-tesm}"
RELEASE_TAG="${TESM_RELEASE_TAG:-latest}"
GITEA_USER="${TESM_GITEA_USER:-}"
GITEA_TOKEN="${TESM_GITEA_TOKEN:-}"
PACKAGE_NAME="tesm-${RELEASE_TAG}.tar.gz"
DOWNLOAD_URL="${GITEA_BASE}/${REPO_OWNER}/${REPO_NAME}/releases/download/${RELEASE_TAG}/${PACKAGE_NAME}"

WORK_DIR="/tmp/tesm-update-$(date +%s)"
PACKAGE_FILE="$WORK_DIR/${PACKAGE_NAME}"

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

if [ "$(id -u)" -ne 0 ]; then
    echo "Bitte als root ausführen (sudo ./update.sh)." >&2
    exit 1
fi

echo -e "${YELLOW}============================================================================${NC}"
echo -e "${YELLOW} TESM Update/Reinstall — Release \"${RELEASE_TAG}\"${NC}"
echo -e "${YELLOW}============================================================================${NC}"
echo
echo "Lädt das Release-Paket herunter und übergibt Installation/Update an"
echo "install.sh daraus -- das erkennt selbst, ob es sich um eine frische"
echo "Installation oder ein Update einer bestehenden handelt, und sichert"
echo "die Datenbank bei einer Schema-Änderung automatisch vorsorglich ab."
echo

read -r -p "Fortfahren? [y/N] " confirm
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
    echo "Abgebrochen — nichts wurde verändert."
    exit 0
fi

echo -e "${RED}→${NC} Lade Paket von ${DOWNLOAD_URL}..."
mkdir -p "$WORK_DIR"
CURL_AUTH=()
if [ -n "$GITEA_USER" ] && [ -n "$GITEA_TOKEN" ]; then
    CURL_AUTH=(-u "${GITEA_USER}:${GITEA_TOKEN}")
fi
curl -fsSL "${CURL_AUTH[@]}" -o "$PACKAGE_FILE" "$DOWNLOAD_URL"
echo -e "${GREEN}✔${NC} Paket heruntergeladen ($(du -h "$PACKAGE_FILE" | cut -f1))."

echo -e "${RED}→${NC} Entpacke Paket..."
mkdir -p "$WORK_DIR/pkg"
tar xzf "$PACKAGE_FILE" -C "$WORK_DIR/pkg" --strip-components=1
echo -e "${GREEN}✔${NC} Paket entpackt."

echo -e "${RED}→${NC} Starte install.sh aus dem Paket..."
bash "$WORK_DIR/pkg/install.sh"

echo
echo -e "${GREEN}============================================================================${NC}"
echo -e "${GREEN} TESM Update/Reinstall (Release \"${RELEASE_TAG}\") abgeschlossen.${NC}"
echo -e "${GREEN}============================================================================${NC}"
echo "Siehe Ausgabe von install.sh oben für Details (In-Place-Update, frische"
echo "Installation, oder Migrationsergebnis inkl. eventuellem Rückroll-Hinweis)."
