#!/bin/bash

echo "🐳 DÉMARRAGE DÉTAILLÉ DE L'APPLICATION VEZA AVEC DOCKER"
echo "=========================================================="
echo ""

# Couleurs pour les messages
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Fonction pour afficher les messages
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# Vérifier que Docker est installé
if ! command -v docker &> /dev/null; then
    log_error "Docker n'est pas installé"
    exit 1
fi

if ! command -v docker-compose &> /dev/null; then
    log_error "Docker Compose n'est pas installé"
    exit 1
fi

# Arrêter les conteneurs existants
log_info "Arrêt des conteneurs existants..."
docker-compose -f docker-compose.production.yml down 2>/dev/null
sleep 2

# Construire les images
log_info "Construction des images Docker..."
docker-compose -f docker-compose.production.yml build --no-cache

if [ $? -ne 0 ]; then
    log_error "Erreur lors de la construction des images"
    exit 1
fi

log_success "Images construites avec succès"

# Démarrer les services de base
log_info "Démarrage des services de base (PostgreSQL, Redis)..."
docker-compose -f docker-compose.production.yml up -d postgres redis

# Attendre que les services de base soient prêts
log_info "Attente que PostgreSQL soit prêt..."
timeout 60 bash -c 'until docker exec veza-postgres-prod pg_isready -U veza_user; do sleep 2; done'
if [ $? -eq 124 ]; then
    log_error "Timeout: PostgreSQL n'a pas démarré dans les 60 secondes"
    docker-compose -f docker-compose.production.yml logs postgres
    exit 1
fi
log_success "PostgreSQL prêt"

log_info "Attente que Redis soit prêt..."
timeout 30 bash -c 'until docker exec veza-redis-prod redis-cli ping; do sleep 2; done'
if [ $? -eq 124 ]; then
    log_error "Timeout: Redis n'a pas démarré dans les 30 secondes"
    docker-compose -f docker-compose.production.yml logs redis
    exit 1
fi
log_success "Redis prêt"

# Démarrer le backend API
log_info "Démarrage du backend API..."
docker-compose -f docker-compose.production.yml up -d backend-api

# Attendre que le backend soit prêt
log_info "Attente que le backend API soit prêt..."
timeout 60 bash -c 'until curl -s http://localhost:8080/api/health > /dev/null; do sleep 3; done'
if [ $? -eq 124 ]; then
    log_error "Timeout: Backend API n'a pas démarré dans les 60 secondes"
    docker-compose -f docker-compose.production.yml logs backend-api
    exit 1
fi
log_success "Backend API prêt"

# Démarrer le frontend
log_info "Démarrage du frontend..."
docker-compose -f docker-compose.production.yml up -d frontend

# Attendre que le frontend soit prêt
log_info "Attente que le frontend soit prêt..."
timeout 60 bash -c 'until curl -s http://localhost:5174 > /dev/null; do sleep 3; done'
if [ $? -eq 124 ]; then
    log_warning "Timeout: Frontend n'a pas démarré dans les 60 secondes"
    docker-compose -f docker-compose.production.yml logs frontend
else
    log_success "Frontend prêt"
fi

# Démarrer le stream server
log_info "Démarrage du stream server..."
docker-compose -f docker-compose.production.yml up -d stream-server

# Attendre que le stream server soit prêt
log_info "Attente que le stream server soit prêt..."
timeout 60 bash -c 'until curl -s http://localhost:8082 > /dev/null; do sleep 3; done'
if [ $? -eq 124 ]; then
    log_warning "Timeout: Stream server n'a pas démarré dans les 60 secondes"
    docker-compose -f docker-compose.production.yml logs stream-server
else
    log_success "Stream server prêt"
fi

# Démarrer le chat server (optionnel)
log_info "Démarrage du chat server..."
docker-compose -f docker-compose.production.yml up -d chat-server

# Attendre que le chat server soit prêt
log_info "Attente que le chat server soit prêt..."
timeout 60 bash -c 'until curl -s http://localhost:8081 > /dev/null; do sleep 3; done'
if [ $? -eq 124 ]; then
    log_warning "Timeout: Chat server n'a pas démarré dans les 60 secondes"
    docker-compose -f docker-compose.production.yml logs chat-server
else
    log_success "Chat server prêt"
fi

# Démarrer les services de monitoring
log_info "Démarrage des services de monitoring..."
docker-compose -f docker-compose.production.yml up -d prometheus grafana

# Attendre que Grafana soit prêt
log_info "Attente que Grafana soit prêt..."
timeout 60 bash -c 'until curl -s http://localhost:3000 > /dev/null; do sleep 3; done'
if [ $? -eq 124 ]; then
    log_warning "Timeout: Grafana n'a pas démarré dans les 60 secondes"
    docker-compose -f docker-compose.production.yml logs grafana
else
    log_success "Grafana prêt"
fi

# Test final de tous les services
echo ""
log_info "Test final de tous les services..."

# Backend API
if curl -s http://localhost:8080/api/health > /dev/null; then
    log_success "✅ Backend API: http://localhost:8080"
else
    log_error "❌ Backend API: Non accessible"
fi

# Frontend
if curl -s http://localhost:5174 > /dev/null; then
    log_success "✅ Frontend: http://localhost:5174"
else
    log_error "❌ Frontend: Non accessible"
fi

# Stream Server
if curl -s http://localhost:8082 > /dev/null; then
    log_success "✅ Stream Server: http://localhost:8082"
else
    log_error "❌ Stream Server: Non accessible"
fi

# Chat Server
if curl -s http://localhost:8081 > /dev/null; then
    log_success "✅ Chat Server: http://localhost:8081"
else
    log_error "❌ Chat Server: Non accessible"
fi

# Grafana
if curl -s http://localhost:3000 > /dev/null; then
    log_success "✅ Grafana: http://localhost:3000"
else
    log_error "❌ Grafana: Non accessible"
fi

# PostgreSQL
if docker exec veza-postgres-prod pg_isready -U veza_user > /dev/null 2>&1; then
    log_success "✅ PostgreSQL: localhost:5432"
else
    log_error "❌ PostgreSQL: Non accessible"
fi

# Redis
if docker exec veza-redis-prod redis-cli ping > /dev/null 2>&1; then
    log_success "✅ Redis: localhost:6379"
else
    log_error "❌ Redis: Non accessible"
fi

echo ""
log_success "🎉 Application Veza démarrée avec Docker !"
echo ""
echo "📱 Services accessibles :"
echo "   • Frontend Web: http://localhost:5174"
echo "   • Backend API: http://localhost:8080"
echo "   • Stream Server: http://localhost:8082"
echo "   • Chat Server: http://localhost:8081"
echo "   • Grafana (Monitoring): http://localhost:3000"
echo "   • PostgreSQL: localhost:5432"
echo "   • Redis: localhost:6379"
echo ""
echo "💡 Commandes utiles :"
echo "   • Voir les logs: docker-compose -f docker-compose.production.yml logs -f"
echo "   • Arrêter: docker-compose -f docker-compose.production.yml down"
echo "   • Redémarrer: docker-compose -f docker-compose.production.yml restart"
echo ""
echo "🔍 Logs en temps réel :"
docker-compose -f docker-compose.production.yml logs -f --tail=50 