#!/usr/bin/env bash
# Richtet Minerva Platform auf diesem Rechner ein. Benötigt nur Docker mit Compose.
set -euo pipefail
cd "$(dirname "$0")"

echo "Minerva Platform – Installation"
echo

command -v docker >/dev/null 2>&1 || {
  echo "Docker fehlt. Bitte Docker Desktop bzw. docker-ce installieren und erneut starten."
  exit 1; }
docker info >/dev/null 2>&1 || { echo "Der Docker-Dienst läuft nicht."; exit 1; }

if [[ -d images ]]; then
  echo "→ Mitgelieferte Abbilder laden"
  for f in images/*.tar.gz; do gunzip -c "$f" | docker load; done
fi

if [[ ! -f .env ]]; then
  echo "→ Konfiguration anlegen (.env)"
  cp .env.example .env
  zufall() { LC_ALL=C tr -dc 'A-Za-z0-9' </dev/urandom | head -c "${1:-40}"; }
  tausche() { # Schlüssel, Wert
    if grep -q "^$1=" .env; then
      /usr/bin/sed -i.bak "s|^$1=.*|$1=$2|" .env && rm -f .env.bak
    else
      printf '%s=%s\n' "$1" "$2" >> .env
    fi
  }
  tausche POSTGRES_PASSWORD "$(zufall 32)"
  tausche SESSION_SECRET "$(zufall 48)"
  echo "   Zugangsdaten wurden zufällig erzeugt und stehen in .env."
fi

set -a; . ./.env; set +a
PORT="${WEB_PORT:-8000}"

echo "→ Container starten"
docker compose up -d

echo "→ Auf den Webdienst warten"
for i in $(seq 1 60); do
  if curl -fs -m 2 -o /dev/null "http://localhost:$PORT/" 2>/dev/null; then break; fi
  sleep 2
done

echo
echo "Fertig. Minerva Platform läuft:"
echo "   http://localhost:$PORT"
IP="$(hostname -I 2>/dev/null | awk '{print $1}' || ipconfig getifaddr en0 2>/dev/null || true)"
[[ -n "${IP:-}" ]] && echo "   http://$IP:$PORT   (für andere Rechner im Firmennetz)"
echo
echo "Erste Schritte: Konto anlegen, Unternehmen anlegen, Struktur aufbauen."
echo "Anleitung:      http://localhost:$PORT/install"
echo "Beenden:        docker compose down     (Daten bleiben in den Volumes erhalten)"
