#!/usr/bin/env bash
# start-dev.sh — levanta infraestructura + migraciones + servidor dev
# Uso: ./scripts/start-dev.sh

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$PROJECT_DIR"

# ── 1. Verificar Docker ─────────────────────────────────────────────────────
if ! command -v docker &>/dev/null; then
  echo "Docker no encontrado. Instalo o aseguro de que este en PATH."
  exit 1
fi

# ── 2. Levantar postgres y redis ────────────────────────────────────────────
echo "Levantando postgres y redis..."
docker compose up -d postgres redis

# ── 3. Esperar a que postgres responda ──────────────────────────────────────
echo "Esperando a postgres..."
MAX_WAIT=30
COUNT=0
until docker compose exec -T postgres pg_isready -U mdv &>/dev/null; do
  sleep 1
  COUNT=$((COUNT + 1))
  if [ "$COUNT" -ge "$MAX_WAIT" ]; then
    echo "postgres no respondio en ${MAX_WAIT}s"
    exit 1
  fi
done
echo "postgres listo"

# ── 4. Instalar dependencias ─────────────────────────────────────────────────
echo "npm install..."
npm install

# ── 5. Asegurar .env con DATABASE_URL ───────────────────────────────────────
if [ ! -f .env ]; then
  echo "Creando .env con DATABASE_URL..."
  cat > .env <<'EOF'
DATABASE_URL=postgres://mdv:mdv_dev_only@localhost:5432/mercadodevida
NODE_ENV=development
EOF
fi

# ── 6. Exportar variables para que los procesos hijos las tengan ───────────────
export DATABASE_URL="postgres://mdv:mdv_dev_only@localhost:5432/mercadodevida"
export NODE_ENV="development"

# ── 7. Aplicar migraciones ──────────────────────────────────────────────────
echo "Aplicando migraciones..."
npx node-pg-migrate up

# ── 8. Arrancar servidor dev ─────────────────────────────────────────────────
echo "Todo listo. Arrancando servidor dev..."
npm run start
