#!/usr/bin/env bash
# Espera a que backend y frontend estén sirviendo tras `docker compose up`.
#
# Uso en Jenkins: el wait real corre dentro del contenedor Playwright con
# --network host (ver Jenkinsfile). Este script es para dev/local cuando los
# puertos 8000/5173 sí son alcanzables desde el shell que lo invoca.
set -euo pipefail

BACKEND_URL="${BACKEND_URL:-http://localhost:8000/api/health}"
FRONTEND_URL="${FRONTEND_URL:-http://localhost:5173/}"
BACKEND_MAX_SEC="${BACKEND_MAX_SEC:-900}"
FRONTEND_MAX_SEC="${FRONTEND_MAX_SEC:-300}"
STEP="${STEP:-5}"

wait_for() {
  local url="$1" max="$2" label="$3"
  echo "== wait: ${label} ${url} =="
  local i=0
  until curl -fsS --connect-timeout 3 --max-time 5 "$url" >/dev/null 2>&1; do
    i=$((i + STEP))
    if [ "$i" -ge "$max" ]; then
      echo "ERROR: timeout esperando ${label} ${url} (${max}s)"
      return 1
    fi
    if [ $((i % 30)) -eq 0 ]; then
      echo "   ...esperando ${label} (${i}/${max}s)"
    fi
    sleep "$STEP"
  done
  echo "== ${label} listo tras ${i}s =="
}

wait_for "$BACKEND_URL"  "$BACKEND_MAX_SEC"  "backend"
wait_for "$FRONTEND_URL" "$FRONTEND_MAX_SEC" "frontend"
