#!/bin/sh
# FlorianNetz Container-Entrypoint.
# Ablauf: auf Postgres warten -> Migrationen anwenden -> (optional) seeden ->
# App-Server starten. Idempotent: Migration + Seed nutzen Journal/Upserts.
set -eu

echo "[entrypoint] FlorianNetz startet ..."

if [ -z "${DATABASE_URL:-}" ]; then
  echo "[entrypoint] FEHLER: DATABASE_URL ist nicht gesetzt." >&2
  exit 1
fi

# --- 1) Auf Postgres warten ---------------------------------------------------
# pg_isready akzeptiert die DATABASE_URL direkt; bis ~60 s pollen.
echo "[entrypoint] Warte auf Postgres ..."
ATTEMPTS=0
MAX_ATTEMPTS="${DB_WAIT_RETRIES:-60}"
until pg_isready -d "${DATABASE_URL}" >/dev/null 2>&1; do
  ATTEMPTS=$((ATTEMPTS + 1))
  if [ "${ATTEMPTS}" -ge "${MAX_ATTEMPTS}" ]; then
    echo "[entrypoint] FEHLER: Postgres nach ${MAX_ATTEMPTS} Versuchen nicht erreichbar." >&2
    exit 1
  fi
  sleep 1
done
echo "[entrypoint] Postgres ist erreichbar."

# --- 2) Migrationen anwenden (idempotent über das Drizzle-Journal) ------------
echo "[entrypoint] Wende Migrationen an ..."
node docker/migrate.mjs

# --- 3) Optionaler Seed -------------------------------------------------------
# RUN_SEED=true füllt den NÖ-Katalog (idempotente Upserts) über das beim Image-
# Build gebündelte Seed-Skript (docker/seed.mjs, siehe scripts/build-seed-bundle.mjs).
# Das Skript MUSS im Image vorhanden sein; fehlt es, ist das Image kaputt gebaut
# und wir brechen laut ab, statt einen leeren Katalog vorzutäuschen.
if [ "${RUN_SEED:-false}" = "true" ]; then
  if [ ! -f docker/seed.mjs ]; then
    echo "[entrypoint] FEHLER: RUN_SEED=true, aber docker/seed.mjs fehlt im Image." >&2
    exit 1
  fi
  echo "[entrypoint] Führe Katalog-Seed aus ..."
  node docker/seed.mjs
fi

# --- 4) App-Server starten ----------------------------------------------------
echo "[entrypoint] Starte Anwendung: $*"
exec node server.js
