#!/bin/bash
set -e

# Arranque del contenedor: espera a dependencias, luego ejecuta CMD (uvicorn, gunicorn, celery, …)

# Función para esperar a un puerto TCP usando Python
wait_for_tcp() {
  local host=$1
  local port=$2
  local service=$3
  local max_attempts=30
  local attempt=1

  echo "Esperando a que $service esté disponible en ${host}:${port}..."

  while [ $attempt -le $max_attempts ]; do
    if python3 -c "import socket; s = socket.socket(); s.settimeout(3); s.connect(('$host', $port)); s.close()" 2>/dev/null; then
      echo "✓ $service está listo y accesible"
      return 0
    fi

    echo "$service no está listo aún... (intento $attempt/$max_attempts)"
    attempt=$((attempt + 1))
    sleep 2
  done

  echo "⚠ WARNING: $service no estuvo disponible después de $max_attempts intentos"
  echo "   Continuando de todas formas..."
  return 0
}

DB_HOST_PRIMARY="${CORE_DB_HOST:-postgres-a76}"
DB_PORT="${CORE_DB_PORT:-5432}"

if ! wait_for_tcp "$DB_HOST_PRIMARY" "$DB_PORT" "PostgreSQL"; then
  # Fallback para entornos donde Docker solo registra el nombre del contenedor.
  if [[ "$DB_HOST_PRIMARY" == "postgres-a76" ]]; then
    wait_for_tcp "anexo76-postgres-a76" "$DB_PORT" "PostgreSQL" || true
  else
    echo "   Continuando de todas formas..."
  fi
fi

# Keycloak solo se espera si se habilita explícitamente (ej. entorno Hub completo).
if [[ "${WAIT_FOR_KEYCLOAK:-0}" == "1" ]]; then
  wait_for_tcp "${KEYCLOAK_SERVICE_HOST:-keycloak}" "${KEYCLOAK_SERVICE_PORT:-8080}" "Keycloak" || true
fi

echo "Iniciando proceso: $*"
exec "$@"
