#!/usr/bin/env bash
# ---------------------------------------------------------------------------
# appRobotBodyTracker — Build & Start ohne Portainer (per docker compose).
#
#   ./deploy.sh           bauen + starten (Default)
#   ./deploy.sh logs      Live-Logs
#   ./deploy.sh stop      stoppen + entfernen
#   ./deploy.sh status    Status
#
# Die robot.json ist im Image eingebacken (/app/config/robot.json) -> kein
# Volume noetig. Das Skript repariert vorher automatisch den haeufigen Fall,
# dass config/robot.json versehentlich ein (leeres) Verzeichnis ist.
# ---------------------------------------------------------------------------
set -euo pipefail
cd "$(dirname "$0")"

PORT=8446
NAME=appRobotBodyTracker

case "${1:-up}" in
  logs)   exec docker compose logs -f ;;
  stop)   exec docker compose down ;;
  status) exec docker compose ps ;;
esac

# --- robot.json muss eine DATEI sein (kein Phantom-Verzeichnis vom Bind-Mount) ---
if [ -d config/robot.json ]; then
  echo ">> config/robot.json ist ein Verzeichnis -> repariere aus tests/data/robot.json"
  rm -rf config/robot.json
  cp tests/data/robot.json config/robot.json
fi
if [ ! -f config/robot.json ]; then
  echo "FEHLER: config/robot.json fehlt."
  echo "Fix:    cp tests/data/robot.json config/robot.json"
  exit 1
fi

echo ">> Build + Start ($NAME, Port $PORT)"
docker compose up -d --build

echo ">> Warte auf /v1/health ..."
for _ in $(seq 1 30); do
  if curl -fsS "http://localhost:${PORT}/v1/health" >/dev/null 2>&1; then
    echo ">> OK   $(curl -fsS "http://localhost:${PORT}/v1/health")"
    ip="$(hostname -I 2>/dev/null | awk '{print $1}')"
    echo ">> API erreichbar unter: http://${ip:-<host>}:${PORT}"
    echo ">> Logs: ./deploy.sh logs   |   Stop: ./deploy.sh stop"
    exit 0
  fi
  sleep 1
done
echo ">> WARN: Health nicht erreicht. Logs ansehen: ./deploy.sh logs"
exit 1
