#!/bin/bash

# Script d'installation pour RPA Vision V2
# Ce script installe toutes les dépendances et configure l'environnement

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

echo "=================================================="
echo "🚀 Installation de RPA Vision V2"
echo "=================================================="
echo ""

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

# Fonction pour afficher les messages
print_step() {
    echo -e "${BLUE}▶ $1${NC}"
}

print_success() {
    echo -e "${GREEN}✓ $1${NC}"
}

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

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

# Vérifier Python
print_step "Vérification de Python..."
if ! command -v python3 &> /dev/null; then
    print_error "Python 3 n'est pas installé. Veuillez l'installer d'abord."
    exit 1
fi

PYTHON_VERSION=$(python3 --version | cut -d' ' -f2)
print_success "Python $PYTHON_VERSION trouvé"

# Créer un environnement virtuel
print_step "Création de l'environnement virtuel..."
if [ ! -d "venv" ]; then
    python3 -m venv venv
    print_success "Environnement virtuel créé"
else
    print_warning "Environnement virtuel existe déjà"
fi

# Activer l'environnement virtuel
print_step "Activation de l'environnement virtuel..."
source venv/bin/activate
print_success "Environnement virtuel activé"

# Mettre à jour pip
print_step "Mise à jour de pip..."
pip install --upgrade pip > /dev/null 2>&1
print_success "pip mis à jour"

# Installer les dépendances Python
print_step "Installation des dépendances Python..."
if [ -f "requirements.txt" ]; then
    pip install -r requirements.txt
    print_success "Dépendances Python installées"
else
    print_error "requirements.txt introuvable"
    exit 1
fi

# Vérifier Ollama
print_step "Vérification d'Ollama..."
if ! command -v ollama &> /dev/null; then
    print_warning "Ollama n'est pas installé"
    echo ""
    echo "Pour installer Ollama:"
    echo "  curl -fsSL https://ollama.com/install.sh | sh"
    echo ""
    read -p "Voulez-vous installer Ollama maintenant? (o/n) " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Oo]$ ]]; then
        curl -fsSL https://ollama.com/install.sh | sh
        print_success "Ollama installé"
    else
        print_warning "Installation d'Ollama ignorée. Vous devrez l'installer manuellement."
    fi
else
    print_success "Ollama est déjà installé"
fi

# Télécharger le modèle Qwen 2.5-VL
if command -v ollama &> /dev/null; then
    print_step "Téléchargement du modèle Qwen 2.5-VL..."
    
    # Vérifier si le modèle existe déjà
    if ollama list | grep -q "qwen2.5-vl"; then
        print_warning "Le modèle qwen2.5-vl est déjà téléchargé"
    else
        echo "⏳ Téléchargement en cours (cela peut prendre plusieurs minutes)..."
        ollama pull qwen2.5-vl:7b
        print_success "Modèle Qwen 2.5-VL téléchargé"
    fi
fi

# Créer les répertoires de données
print_step "Création des répertoires de données..."
mkdir -p data/user_profiles
mkdir -p data/logs
mkdir -p data/faiss_index
mkdir -p data/whitelist
mkdir -p models
print_success "Répertoires créés"

# Générer les clés de chiffrement
print_step "Génération des clés de chiffrement..."
python3 << EOF
from cryptography.fernet import Fernet
import os

key_file = "data/.encryption_key"
if not os.path.exists(key_file):
    key = Fernet.generate_key()
    with open(key_file, "wb") as f:
        f.write(key)
    print("Clé de chiffrement générée")
else:
    print("Clé de chiffrement existe déjà")
EOF
print_success "Clés de chiffrement prêtes"

# Télécharger les modèles de vision (optionnel)
print_step "Configuration des modèles de vision..."
echo ""
echo "Les modèles de vision seront téléchargés automatiquement au premier lancement."
echo "Modèles supportés:"
echo "  - OWL-ViT v2 (Google)"
echo "  - Grounding DINO (IDEA Research)"
echo "  - YOLO-World (Tencent)"
echo ""
print_success "Configuration des modèles prête"

# Créer un fichier de configuration par défaut
print_step "Création de la configuration par défaut..."
if [ ! -f "core/config.py" ]; then
    print_warning "core/config.py introuvable"
else
    print_success "Configuration par défaut prête"
fi

# Vérifier les dépendances système
print_step "Vérification des dépendances système..."

# Vérifier xdotool (pour Linux)
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
    if ! command -v xdotool &> /dev/null; then
        print_warning "xdotool n'est pas installé (recommandé pour Linux)"
        echo "  Installation: sudo apt-get install xdotool"
    else
        print_success "xdotool trouvé"
    fi
fi

# Résumé de l'installation
echo ""
echo "=================================================="
echo "✅ Installation terminée!"
echo "=================================================="
echo ""
echo "📋 Prochaines étapes:"
echo ""
echo "1. Activer l'environnement virtuel:"
echo "   source venv/bin/activate"
echo ""
echo "2. Lancer l'application:"
echo "   python3 main.py"
echo ""
echo "3. Configuration:"
echo "   - Modifiez core/config.py pour personnaliser"
echo "   - Ajoutez des fenêtres à la liste blanche via l'interface"
echo ""
echo "📚 Documentation:"
echo "   - README.md : Guide complet"
echo "   - core/*/README.md : Documentation des modules"
echo ""
echo "🎯 Modes disponibles:"
echo "   - 👀 Shadow : Observation et apprentissage"
echo "   - 🤝 Assisté : Suggestions avec validation"
echo "   - 🤖 Autopilot : Exécution automatique"
echo ""
echo "=================================================="
echo ""

# Demander si l'utilisateur veut lancer l'application
read -p "Voulez-vous lancer l'application maintenant? (o/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Oo]$ ]]; then
    echo ""
    echo "🚀 Lancement de RPA Vision V2..."
    python3 main.py
fi
