#!/bin/bash
set -e

# Script de inicialización para Keycloak
# Espera a que PostgreSQL esté completamente listo antes de iniciar

echo "=========================================="
echo "Keycloak - Inicialización"
echo "=========================================="

# Función para esperar a PostgreSQL
wait_for_postgres() {
  local host=$1
  local port=$2
  local user=$3
  local db=$4
  local max_attempts=60
  local attempt=1

  echo "Esperando a que PostgreSQL esté disponible en ${host}:${port}..."
  
  while [ $attempt -le $max_attempts ]; do
    if pg_isready -h "$host" -p "$port" -U "$user" > /dev/null 2>&1; then
      # PostgreSQL acepta conexiones, verificar que la base de datos existe
      if psql -h "$host" -p "$port" -U "$user" -d "$db" -c "SELECT 1" > /dev/null 2>&1; then
        echo "✓ PostgreSQL está listo y la base de datos '$db' existe"
        return 0
      else
        echo "PostgreSQL está listo pero la base de datos '$db' no existe aún... (intento $attempt/$max_attempts)"
      fi
    else
      echo "PostgreSQL no está listo aún... (intento $attempt/$max_attempts)"
    fi
    
    attempt=$((attempt + 1))
    sleep 2
  done

  echo "✗ ERROR: PostgreSQL no estuvo disponible después de $max_attempts intentos"
  exit 1
}

# Esperar a que PostgreSQL esté listo
wait_for_postgres "${KC_DB_URL_HOST:-postgres-keycloak}" "${KC_DB_URL_PORT:-5432}" "${KC_DB_USERNAME:-postgres}" "${KC_DB_URL_DATABASE:-keycloak}"

echo "Iniciando Keycloak..."
echo "=========================================="

# Ejecutar el comando original de Keycloak
exec /opt/keycloak/bin/kc.sh "$@"
