#!/bin/bash
# =====================================================================
# KARCH SERVICE · BAUMKATASTER — Installation auf dev2.karch-service.de
#
#   sudo bash install.sh
#
# Das Skript erkennt sein eigenes Verzeichnis selbst, richtet den
# systemd-Dienst ein und zeigt am Ende den Apache-Block zum Einfügen.
# =====================================================================
set -e

DIR="$(cd "$(dirname "$0")" && pwd)"      # Groß-/Kleinschreibung spielt damit keine Rolle
NAME="karch-baumkataster"
PORT="${PORT:-3025}"
SERVICE="/etc/systemd/system/${NAME}.service"

echo "=============================================="
echo " Karch Baumkataster – Installation"
echo " Verzeichnis: $DIR"
echo "=============================================="

# --- 1. Voraussetzungen -----------------------------------------------
if ! command -v node >/dev/null 2>&1; then
  echo "FEHLER: Node.js ist nicht installiert."
  echo "  sudo apt update && sudo apt install -y nodejs"
  exit 1
fi
echo "[1/6] Node.js gefunden: $(node -v)"

# --- 2. Freien Port suchen --------------------------------------------
belegt() { ss -ltn 2>/dev/null | grep -q ":$1 " ; }
while belegt "$PORT"; do
  echo "      Port $PORT ist belegt – probiere $((PORT+1))"
  PORT=$((PORT+1))
done
echo "[2/6] Port: $PORT"

# --- 3. Verzeichnisse und Rechte --------------------------------------
mkdir -p "$DIR/data/fotos"
chmod 755 "$DIR"
chmod -R 775 "$DIR/data"
echo "[3/6] Datenverzeichnis bereit: $DIR/data"

# --- 4. systemd-Dienst -------------------------------------------------
cat > "$SERVICE" <<EOF
[Unit]
Description=Karch Service Baumkataster
After=network.target

[Service]
Type=simple
WorkingDirectory=$DIR
ExecStart=$(command -v node) $DIR/server.js
Environment=NODE_ENV=production
Environment=PORT=$PORT
Restart=always
RestartSec=5
User=root
StandardOutput=journal
StandardError=journal
SyslogIdentifier=$NAME

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable "$NAME" >/dev/null 2>&1
systemctl restart "$NAME"
sleep 2
echo "[4/6] Dienst eingerichtet und gestartet"

# --- 5. Funktionsprüfung ----------------------------------------------
if curl -fsS "http://127.0.0.1:$PORT/api/health" >/dev/null 2>&1; then
  echo "[5/6] Dienst antwortet: $(curl -fsS http://127.0.0.1:$PORT/api/health)"
else
  echo "[5/6] WARNUNG: Dienst antwortet nicht. Bitte prüfen:"
  echo "      journalctl -u $NAME -n 40 --no-pager"
fi

# --- 6. Apache -------------------------------------------------------
echo "[6/6] Apache-Konfiguration"
cat <<EOF

--------------------------------------------------------------------
Folgenden Block in /etc/apache2/sites-available/000-default-le-ssl.conf
INNERHALB von <VirtualHost *:443> einfügen:

    RedirectMatch permanent ^/baumkataster\$ /baumkataster/
    ProxyPreserveHost On
    ProxyPass        /baumkataster/  http://127.0.0.1:$PORT/
    ProxyPassReverse /baumkataster/  http://127.0.0.1:$PORT/
    <Location /baumkataster/>
        Require all granted
    </Location>

Anschließend:

    sudo a2enmod proxy proxy_http
    sudo apache2ctl configtest && sudo systemctl reload apache2

Aufruf danach:  https://dev2.karch-service.de/baumkataster/
--------------------------------------------------------------------

Nützliche Befehle:
    systemctl status $NAME
    journalctl -u $NAME -f
    systemctl restart $NAME

EOF
echo "Fertig."
