#!/bin/bash

# Veza Full Stack Application Stop Script
# Version: 1.0.0

set -e

echo "🛑 Arrêt de l'application Veza..."

# Couleurs pour l'affichage
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
print_status() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

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

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

# Arrêter les processus locaux
stop_local_processes() {
    print_status "Arrêt des processus locaux..."
    
    # Arrêter les processus par PID si les fichiers existent
    if [ -f "logs/backend.pid" ]; then
        BACKEND_PID=$(cat logs/backend.pid)
        kill $BACKEND_PID 2>/dev/null || true
        rm -f logs/backend.pid
        print_success "Backend arrêté"
    fi
    
    if [ -f "logs/frontend.pid" ]; then
        FRONTEND_PID=$(cat logs/frontend.pid)
        kill $FRONTEND_PID 2>/dev/null || true
        rm -f logs/frontend.pid
        print_success "Frontend arrêté"
    fi
    
    if [ -f "logs/chat-server.pid" ]; then
        CHAT_PID=$(cat logs/chat-server.pid)
        kill $CHAT_PID 2>/dev/null || true
        rm -f logs/chat-server.pid
        print_success "Chat server arrêté"
    fi
    
    if [ -f "logs/desktop.pid" ]; then
        DESKTOP_PID=$(cat logs/desktop.pid)
        kill $DESKTOP_PID 2>/dev/null || true
        rm -f logs/desktop.pid
        print_success "Desktop app arrêtée"
    fi
    
    # Arrêter les processus par nom
    pkill -f "server" 2>/dev/null || true
    pkill -f "vite" 2>/dev/null || true
    pkill -f "npm run dev" 2>/dev/null || true
    pkill -f "electron" 2>/dev/null || true
    pkill -f "cargo" 2>/dev/null || true
    
    print_success "Processus locaux arrêtés"
}

# Arrêter les conteneurs Docker
stop_docker_containers() {
    print_status "Arrêt des conteneurs Docker..."
    
    # Arrêter les conteneurs de développement
    docker-compose -f veza-backend-api/docker-compose.local.yml down 2>/dev/null || true
    
    # Arrêter les conteneurs de production
    docker-compose -f docker-compose.production.yml down 2>/dev/null || true
    
    # Arrêter tous les conteneurs Veza
    docker ps -q --filter "name=veza" | xargs -r docker stop 2>/dev/null || true
    
    print_success "Conteneurs Docker arrêtés"
}

# Nettoyer les ports
cleanup_ports() {
    print_status "Nettoyage des ports..."
    
    # Vérifier et nettoyer les ports utilisés
    for port in 8080 5176 8081 5432 6379; do
        if lsof -i :$port > /dev/null 2>&1; then
            print_warning "Port $port encore utilisé, tentative de nettoyage..."
            lsof -ti :$port | xargs -r kill -9 2>/dev/null || true
        fi
    done
    
    print_success "Ports nettoyés"
}

# Afficher le statut final
show_final_status() {
    echo ""
    echo "📊 Statut final:"
    echo "=================="
    
    # Vérifier les processus
    if pgrep -f "server" > /dev/null; then
        echo -e "❌ Backend: Encore en cours"
    else
        echo -e "✅ Backend: Arrêté"
    fi
    
    if pgrep -f "vite" > /dev/null; then
        echo -e "❌ Frontend: Encore en cours"
    else
        echo -e "✅ Frontend: Arrêté"
    fi
    
    if pgrep -f "electron" > /dev/null; then
        echo -e "❌ Desktop: Encore en cours"
    else
        echo -e "✅ Desktop: Arrêté"
    fi
    
    # Vérifier les conteneurs Docker
    if docker ps | grep -q "veza"; then
        echo -e "❌ Conteneurs Docker: Encore en cours"
    else
        echo -e "✅ Conteneurs Docker: Arrêtés"
    fi
    
    echo ""
}

# Fonction principale
main() {
    echo "🎵 Arrêt de l'application Veza"
    echo "================================"
    
    # Arrêter les services
    stop_local_processes
    stop_docker_containers
    cleanup_ports
    
    # Afficher le statut final
    show_final_status
    
    echo "🎉 Application Veza arrêtée avec succès!"
    echo ""
    echo "💡 Pour redémarrer: ./start-veza.sh"
    echo ""
}

# Exécuter la fonction principale
main "$@" 