#!/bin/bash
#
# Script d'installation complète des dépendances GeniusIA v2
# Installe toutes les dépendances Python et système manquantes
#

set -e  # Arrêter en cas d'erreur

echo "============================================================"
echo "INSTALLATION COMPLÈTE DES DÉPENDANCES GENIUSIA V2"
echo "============================================================"
echo ""

# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Fonction pour afficher les messages
print_status() {
    echo -e "${GREEN}[✓]${NC} $1"
}

print_error() {
    echo -e "${RED}[✗]${NC} $1"
}

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

print_info() {
    echo -e "${YELLOW}[i]${NC} $1"
}

# Vérifier si on est dans le bon répertoire
if [ ! -d "geniusia2" ]; then
    print_error "Erreur: Le répertoire geniusia2 n'existe pas"
    print_info "Exécute ce script depuis la racine du projet"
    exit 1
fi

print_status "Répertoire du projet trouvé"

# 1. Vérifier/Créer l'environnement virtuel
echo ""
echo "1. Environnement virtuel"
echo "----------------------------------------"

if [ ! -d "geniusia2/venv" ]; then
    print_warning "Environnement virtuel non trouvé, création..."
    python3 -m venv geniusia2/venv
    print_status "Environnement virtuel créé"
else
    print_status "Environnement virtuel existe"
fi

# Activer l'environnement virtuel
print_info "Activation de l'environnement virtuel..."
source geniusia2/venv/bin/activate

if [ -z "$VIRTUAL_ENV" ]; then
    print_error "Échec de l'activation de l'environnement virtuel"
    exit 1
fi

print_status "Environnement virtuel activé: $VIRTUAL_ENV"

# 2. Mettre à jour pip
echo ""
echo "2. Mise à jour de pip"
echo "----------------------------------------"
pip install --upgrade pip setuptools wheel > /dev/null 2>&1
print_status "pip mis à jour"

# 3. Installer les dépendances système
echo ""
echo "3. Dépendances système"
echo "----------------------------------------"

print_info "Vérification des dépendances système..."

# Vérifier wmctrl
if ! command -v wmctrl &> /dev/null; then
    print_warning "wmctrl non installé, installation..."
    sudo apt-get update
    sudo apt-get install -y wmctrl
    print_status "wmctrl installé"
else
    print_status "wmctrl déjà installé"
fi

# Vérifier xdotool
if ! command -v xdotool &> /dev/null; then
    print_warning "xdotool non installé, installation..."
    sudo apt-get install -y xdotool
    print_status "xdotool installé"
else
    print_status "xdotool déjà installé"
fi

# Vérifier scrot
if ! command -v scrot &> /dev/null; then
    print_warning "scrot non installé, installation..."
    sudo apt-get install -y scrot
    print_status "scrot installé"
else
    print_status "scrot déjà installé"
fi

# 4. Installer PyTorch (CPU version pour économiser l'espace)
echo ""
echo "4. PyTorch"
echo "----------------------------------------"

if python -c "import torch" 2>/dev/null; then
    TORCH_VERSION=$(python -c "import torch; print(torch.__version__)" 2>/dev/null)
    print_status "PyTorch déjà installé (version $TORCH_VERSION)"
else
    print_warning "Installation de PyTorch (CPU version)..."
    print_info "Cela peut prendre plusieurs minutes..."
    pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
    print_status "PyTorch installé"
fi

# 5. Installer FAISS
echo ""
echo "5. FAISS"
echo "----------------------------------------"

if python -c "import faiss" 2>/dev/null; then
    print_status "FAISS déjà installé"
else
    print_warning "Installation de FAISS..."
    
    # Essayer d'abord faiss-cpu
    if pip install faiss-cpu; then
        print_status "FAISS (CPU) installé"
    else
        print_warning "Échec avec faiss-cpu, essai avec le script install_faiss.sh..."
        if [ -f "geniusia2/install_faiss.sh" ]; then
            bash geniusia2/install_faiss.sh
            print_status "FAISS installé via script"
        else
            print_error "Impossible d'installer FAISS"
            print_info "Essaye manuellement: pip install faiss-cpu"
        fi
    fi
fi

# 6. Installer OpenCLIP
echo ""
echo "6. OpenCLIP"
echo "----------------------------------------"

if python -c "import open_clip" 2>/dev/null; then
    print_status "OpenCLIP déjà installé"
else
    print_warning "Installation d'OpenCLIP..."
    pip install open-clip-torch
    print_status "OpenCLIP installé"
fi

# 7. Installer les autres dépendances Python
echo ""
echo "7. Autres dépendances Python"
echo "----------------------------------------"

print_info "Installation des dépendances depuis requirements.txt..."

if [ -f "geniusia2/requirements.txt" ]; then
    pip install -r geniusia2/requirements.txt 2>&1 | grep -v "Requirement already satisfied" || true
    print_status "Dépendances installées depuis requirements.txt"
else
    print_warning "requirements.txt non trouvé, installation manuelle..."
    
    # Liste des dépendances critiques
    DEPS=(
        "pynput"
        "transformers"
        "Pillow"
        "numpy"
        "opencv-python"
        "scikit-learn"
        "cryptography"
    )
    
    for dep in "${DEPS[@]}"; do
        if python -c "import ${dep//-/_}" 2>/dev/null; then
            print_status "$dep déjà installé"
        else
            print_info "Installation de $dep..."
            pip install "$dep"
            print_status "$dep installé"
        fi
    done
fi

# 8. Vérification finale
echo ""
echo "8. Vérification finale"
echo "----------------------------------------"

print_info "Vérification des imports critiques..."

# Fonction de test d'import
test_import() {
    if python -c "import $1" 2>/dev/null; then
        print_status "$1"
        return 0
    else
        print_error "$1 - ÉCHEC"
        return 1
    fi
}

FAILED=0

test_import "torch" || FAILED=$((FAILED + 1))
test_import "faiss" || FAILED=$((FAILED + 1))
test_import "open_clip" || FAILED=$((FAILED + 1))
test_import "PIL" || FAILED=$((FAILED + 1))
test_import "numpy" || FAILED=$((FAILED + 1))
test_import "pynput" || FAILED=$((FAILED + 1))
test_import "transformers" || FAILED=$((FAILED + 1))

# 9. Résumé
echo ""
echo "============================================================"
echo "RÉSUMÉ DE L'INSTALLATION"
echo "============================================================"
echo ""

if [ $FAILED -eq 0 ]; then
    print_status "Toutes les dépendances sont installées avec succès!"
    echo ""
    print_info "Pour utiliser le système, active l'environnement virtuel:"
    echo "  source geniusia2/venv/bin/activate"
    echo ""
    print_info "Puis lance l'application:"
    echo "  python3 geniusia2/main.py"
    echo ""
    exit 0
else
    print_error "$FAILED dépendance(s) n'ont pas pu être installées"
    echo ""
    print_info "Vérifie les erreurs ci-dessus et réessaye"
    print_info "Tu peux aussi exécuter le diagnostic:"
    echo "  python3 diagnostic_complet_systeme.py"
    echo ""
    exit 1
fi
