#!/bin/bash

# Script de démarrage rapide pour l'application Veza
# Ce script configure et lance tous les services nécessaires

set -e

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

echo "🚀 Démarrage rapide de l'application Veza"
echo "=========================================="
echo ""

# Créer les répertoires de logs
mkdir -p logs

# 1. Vérifier JWT_SECRET
echo "📝 Vérification de la configuration..."
if [ ! -f "veza-backend-api/.env" ] || ! grep -q "JWT_SECRET" "veza-backend-api/.env"; then
    echo "⚙️  Génération du JWT_SECRET..."
    JWT_SECRET=$(openssl rand -base64 32)
    cat > veza-backend-api/.env << EOF
# Configuration générée automatiquement
JWT_SECRET=${JWT_SECRET}
DATABASE_URL=postgres://veza_user:veza_password@localhost:5432/veza_db?sslmode=disable
REDIS_URL=redis://localhost:6379/0
PORT=8080
GIN_MODE=release
LOG_LEVEL=INFO
EOF
    echo "✅ Configuration créée dans veza-backend-api/.env"
else
    echo "✅ Configuration existante détectée"
fi

# 2. Démarrer PostgreSQL et Redis avec Docker
echo ""
echo "🐳 Démarrage de PostgreSQL et Redis..."
docker-compose up -d postgres redis

# Attendre que les services soient prêts
echo "⏳ Attente de PostgreSQL..."
timeout 30 bash -c 'until docker-compose exec -T postgres pg_isready -U veza_user; do sleep 1; done' || {
    echo "❌ PostgreSQL n'a pas démarré à temps"
    exit 1
}
echo "✅ PostgreSQL prêt"

echo "⏳ Vérification de Redis..."
timeout 30 bash -c 'until docker-compose exec -T redis redis-cli ping | grep -q PONG; do sleep 1; done' || {
    echo "❌ Redis n'a pas démarré à temps"
    exit 1
}
echo "✅ Redis prêt"

# 3. Compiler le backend (si nécessaire)
echo ""
echo "🔨 Compilation du backend Go..."
cd veza-backend-api
if [ ! -f "bin/api" ] || [ main.go -nt bin/api ]; then
    go build -o bin/api main.go
    echo "✅ Backend compilé avec succès"
else
    echo "✅ Backend déjà compilé (à jour)"
fi
cd ..

# 4. Démarrer le backend en arrière-plan
echo ""
echo "🚀 Lancement du backend Go API..."
cd veza-backend-api
./bin/api > ../logs/backend.log 2>&1 &
BACKEND_PID=$!
echo "✅ Backend démarré (PID: $BACKEND_PID)"
cd ..

# Attendre que le backend soit prêt
echo "⏳ Attente du backend..."
for i in {1..30}; do
    if curl -s http://localhost:8080/api/v1/health > /dev/null 2>&1; then
        echo "✅ Backend prêt sur http://localhost:8080"
        break
    fi
    if [ $i -eq 30 ]; then
        echo "❌ Le backend n'a pas démarré à temps"
        echo "📋 Logs du backend:"
        tail -20 logs/backend.log
        exit 1
    fi
    sleep 1
done

# 5. Démarrer le frontend
echo ""
echo "🎨 Lancement du frontend Vite..."
cd apps/web
npm run dev > ../../logs/frontend.log 2>&1 &
FRONTEND_PID=$!
echo "✅ Frontend démarré (PID: $FRONTEND_PID)"
cd ../..

# Attendre que le frontend soit prêt
echo "⏳ Attente du frontend..."
for i in {1..30}; do
    if curl -s http://localhost:3001 > /dev/null 2>&1; then
        echo "✅ Frontend prêt sur http://localhost:3001"
        break
    fi
    if [ $i -eq 30 ]; then
        echo "⚠️  Le frontend n'a pas démarré à temps (mais peut continuer en arrière-plan)"
    fi
    sleep 1
done

# 6. Afficher le statut
echo ""
echo "════════════════════════════════════════"
echo "✅ Application Veza démarrée avec succès!"
echo "════════════════════════════════════════"
echo ""
echo "📊 Services actifs:"
echo "  • PostgreSQL    : localhost:5432"
echo "  • Redis         : localhost:6379"
echo "  • Backend API   : http://localhost:8080"
echo "  • Frontend      : http://localhost:3001"
echo ""
echo "📝 Logs disponibles dans:"
echo "  • Backend  : logs/backend.log"
echo "  • Frontend : logs/frontend.log"
echo ""
echo "🌐 Accédez à l'application:"
echo "  👉 http://localhost:3001"
echo ""
echo "🛑 Pour arrêter tous les services:"
echo "  ./scripts/stop-all-services.sh"
echo ""
echo "📋 Pour voir les logs en temps réel:"
echo "  tail -f logs/backend.log logs/frontend.log"
echo ""

# Sauvegarder les PIDs pour pouvoir les arrêter plus tard
cat > .service-pids << EOF
BACKEND_PID=$BACKEND_PID
FRONTEND_PID=$FRONTEND_PID
EOF

echo "✨ Bon développement!"

