#!/bin/bash

# 🧪 Veza Platform - Test Complet
# ===============================

echo "🧪 Test complet de Veza Platform"
echo "================================"
echo ""

# 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 résultats
print_result() {
    if [ $1 -eq 0 ]; then
        echo -e "${GREEN}✅ $2${NC}"
    else
        echo -e "${RED}❌ $2${NC}"
    fi
}

print_info() {
    echo -e "${BLUE}ℹ️  $1${NC}"
}

print_warning() {
    echo -e "${YELLOW}⚠️  $1${NC}"
}

# Test 1: Vérifier que tous les services sont démarrés
echo "🔍 Test 1: Vérification des services..."
echo "----------------------------------------"

# Backend API
if curl -s http://localhost:8080/api/health > /dev/null; then
    print_result 0 "Backend API (port 8080)"
else
    print_result 1 "Backend API (port 8080)"
fi

# Frontend Web
if curl -s http://localhost:5176/ > /dev/null; then
    print_result 0 "Frontend Web (port 5176)"
else
    print_result 1 "Frontend Web (port 5176)"
fi

# PostgreSQL
if pg_isready -h localhost -p 5432 > /dev/null 2>&1; then
    print_result 0 "PostgreSQL (port 5432)"
else
    print_result 1 "PostgreSQL (port 5432)"
fi

# Redis
if redis-cli ping > /dev/null 2>&1; then
    print_result 0 "Redis (port 6379)"
else
    print_result 1 "Redis (port 6379)"
fi

# Chat Server
if curl -s http://localhost:3001/health > /dev/null 2>&1; then
    print_result 0 "Chat Server (port 3001)"
else
    print_result 1 "Chat Server (port 3001)"
fi

echo ""

# Test 2: Vérifier les réponses API
echo "🔍 Test 2: Vérification des réponses API..."
echo "--------------------------------------------"

# Test de l'endpoint health
HEALTH_RESPONSE=$(curl -s http://localhost:8080/api/health)
if echo "$HEALTH_RESPONSE" | grep -q "healthy"; then
    print_result 0 "Endpoint /api/health"
    echo "   Réponse: $(echo "$HEALTH_RESPONSE" | jq -r '.status' 2>/dev/null || echo "JSON invalide")"
else
    print_result 1 "Endpoint /api/health"
fi

# Test de l'endpoint users (si disponible)
if curl -s http://localhost:8080/api/users > /dev/null 2>&1; then
    print_result 0 "Endpoint /api/users"
else
    print_warning "Endpoint /api/users non disponible"
fi

echo ""

# Test 3: Vérifier l'interface web
echo "🔍 Test 3: Vérification de l'interface web..."
echo "---------------------------------------------"

# Vérifier que la page se charge
WEB_CONTENT=$(curl -s http://localhost:5176/)
if echo "$WEB_CONTENT" | grep -q "Veza Platform"; then
    print_result 0 "Page d'accueil contient 'Veza Platform'"
else
    print_result 1 "Page d'accueil ne contient pas 'Veza Platform'"
fi

# Vérifier que React se charge
if echo "$WEB_CONTENT" | grep -q "react"; then
    print_result 0 "React détecté dans la page"
else
    print_result 1 "React non détecté dans la page"
fi

echo ""

# Test 4: Vérifier la base de données
echo "🔍 Test 4: Vérification de la base de données..."
echo "------------------------------------------------"

# Test de connexion PostgreSQL
if psql -h localhost -U veza_user -d veza_local -c "SELECT 1;" > /dev/null 2>&1; then
    print_result 0 "Connexion PostgreSQL réussie"
else
    print_warning "Connexion PostgreSQL échouée (vérifiez les credentials)"
fi

# Test de connexion Redis
if redis-cli ping | grep -q "PONG"; then
    print_result 0 "Connexion Redis réussie"
else
    print_result 1 "Connexion Redis échouée"
fi

echo ""

# Test 5: Vérifier les processus en cours
echo "🔍 Test 5: Vérification des processus..."
echo "----------------------------------------"

# Vérifier les processus Node.js
NODE_PROCESSES=$(ps aux | grep -E "node.*vite" | grep -v grep | wc -l)
if [ $NODE_PROCESSES -gt 0 ]; then
    print_result 0 "Processus Vite détectés ($NODE_PROCESSES)"
else
    print_result 1 "Aucun processus Vite détecté"
fi

# Vérifier les processus Go
GO_PROCESSES=$(ps aux | grep -E "server" | grep -v grep | wc -l)
if [ $GO_PROCESSES -gt 0 ]; then
    print_result 0 "Processus Backend détectés ($GO_PROCESSES)"
else
    print_result 1 "Aucun processus Backend détecté"
fi

# Vérifier les processus Electron
ELECTRON_PROCESSES=$(ps aux | grep -E "electron" | grep -v grep | wc -l)
if [ $ELECTRON_PROCESSES -gt 0 ]; then
    print_result 0 "Processus Electron détectés ($ELECTRON_PROCESSES)"
else
    print_warning "Aucun processus Electron détecté (desktop non lancé)"
fi

echo ""

# Test 6: Vérifier les ports utilisés
echo "🔍 Test 6: Vérification des ports..."
echo "------------------------------------"

PORTS_TO_CHECK=(5176 8080 5432 6379 3001)
for port in "${PORTS_TO_CHECK[@]}"; do
    if lsof -i :$port > /dev/null 2>&1; then
        print_result 0 "Port $port ouvert"
    else
        print_result 1 "Port $port fermé"
    fi
done

echo ""

# Test 7: Vérifier les fichiers de configuration
echo "🔍 Test 7: Vérification des fichiers de configuration..."
echo "-------------------------------------------------------"

# Vérifier les fichiers essentiels
FILES_TO_CHECK=(
    "veza-frontend/package.json"
    "veza-backend-api/go.mod"
    "veza-desktop/package.json"
    "docker-compose.production.yml"
    "start-veza.sh"
    "stop-veza.sh"
)

for file in "${FILES_TO_CHECK[@]}"; do
    if [ -f "$file" ]; then
        print_result 0 "Fichier $file présent"
    else
        print_result 1 "Fichier $file manquant"
    fi
done

echo ""

# Résumé final
echo "📊 Résumé des tests"
echo "==================="

TOTAL_TESTS=0
PASSED_TESTS=0

# Compter les tests réussis (lignes avec ✅)
PASSED_TESTS=$(grep -c "✅" <<< "$(tail -n +50 $0)")
TOTAL_TESTS=$(grep -c "Test [0-9]" <<< "$(tail -n +50 $0)")

echo "Tests réussis: $PASSED_TESTS"
echo "Tests échoués: $((TOTAL_TESTS - PASSED_TESTS))"
echo ""

if [ $PASSED_TESTS -eq $TOTAL_TESTS ]; then
    echo -e "${GREEN}🎉 Tous les tests sont passés ! Veza Platform est opérationnel.${NC}"
    echo ""
    echo "📱 Accès aux applications :"
    echo "   🌐 Web App: http://localhost:5176"
    echo "   🖥️  Desktop: ./start-desktop.sh"
    echo ""
    echo "🔧 Services actifs :"
    echo "   ✅ Backend API: http://localhost:8080"
    echo "   ✅ Frontend: http://localhost:5176"
    echo "   ✅ PostgreSQL: localhost:5432"
    echo "   ✅ Redis: localhost:6379"
    echo "   ✅ Chat Server: localhost:3001"
else
    echo -e "${YELLOW}⚠️  Certains tests ont échoué. Vérifiez les services manquants.${NC}"
    echo ""
    echo "🔧 Commandes de dépannage :"
    echo "   - Redémarrer: ./start-veza.sh"
    echo "   - Arrêter: ./stop-veza.sh"
    echo "   - Logs: tail -f logs/*.log"
fi

echo ""
echo "🧪 Test complet terminé" 