#!/bin/bash

# Script d'installation pour Audio Classifier sur serveur Linux
# À exécuter directement sur le serveur après avoir cloné le repo

set -e

echo "🚀 Installation de Audio Classifier"
echo ""

# 1. Vérifier qu'on est dans le bon dossier
if [ ! -f "docker-compose.yml" ]; then
    echo "❌ Erreur: Ce script doit être exécuté depuis la racine du projet"
    echo "Usage: cd audio-classifier && bash install-server.sh"
    exit 1
fi

# 2. Vérifier l'architecture
echo "🔍 Détection de l'architecture..."
ARCH=$(uname -m)
echo "Architecture détectée: $ARCH"
if [ "$ARCH" = "x86_64" ]; then
    echo "✅ Architecture x86_64 - Parfait pour Essentia !"
elif [ "$ARCH" = "aarch64" ]; then
    echo "⚠️  Architecture ARM64 - Essentia pourrait avoir des limitations"
else
    echo "⚠️  Architecture non testée: $ARCH"
fi
echo ""

# 3. Installer Docker si nécessaire
echo "🐳 Vérification de Docker..."
if ! command -v docker &> /dev/null; then
    echo "Docker non trouvé. Installation..."
    curl -fsSL https://get.docker.com | sudo sh
    sudo usermod -aG docker $USER
    echo "✅ Docker installé"
    echo "⚠️  Vous devrez vous reconnecter pour utiliser Docker sans sudo"
    echo "Commande: exit puis reconnectez-vous en SSH"
else
    echo "✅ Docker déjà installé"
fi
echo ""

# 4. Installer Docker Compose si nécessaire
echo "🐳 Vérification de Docker Compose..."
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null 2>&1; then
    echo "Docker Compose non trouvé. Installation..."
    sudo apt-get update
    sudo apt-get install -y docker-compose-plugin
    echo "✅ Docker Compose installé"
else
    echo "✅ Docker Compose déjà installé"
fi
echo ""

# 5. Télécharger les modèles Essentia
echo "🤖 Téléchargement des modèles Essentia..."
if [ -f "scripts/download-essentia-models.sh" ]; then
    bash scripts/download-essentia-models.sh
    echo "✅ Modèles téléchargés"
else
    echo "⚠️  Script de téléchargement non trouvé, les modèles seront téléchargés plus tard"
fi
echo ""

# 6. Créer le fichier .env si nécessaire
if [ ! -f ".env" ]; then
    echo "📝 Création du fichier .env..."
    cat > .env << 'EOF'
# Database
POSTGRES_USER=audio_classifier
POSTGRES_PASSWORD=change_this_password
POSTGRES_DB=audio_classifier
DATABASE_URL=postgresql://audio_classifier:change_this_password@db:5432/audio_classifier

# Backend
ESSENTIA_MODELS_PATH=/app/models

# Frontend
NEXT_PUBLIC_API_URL=http://localhost:8000
EOF
    echo "✅ Fichier .env créé"
    echo "⚠️  Pensez à modifier les mots de passe dans .env"
else
    echo "✅ Fichier .env existe déjà"
fi
echo ""

# 7. Arrêter les conteneurs existants
echo "🛑 Arrêt des conteneurs existants..."
docker compose down 2>/dev/null || true
echo ""

# 8. Build de l'application
echo "🔨 Build de l'application..."
docker compose build
echo "✅ Build terminé"
echo ""

# 9. Démarrer l'application
echo "🚀 Démarrage de l'application..."
docker compose up -d
echo ""

# 10. Attendre que les services démarrent
echo "⏳ Attente du démarrage des services..."
sleep 10
echo ""

# 11. Vérifier le statut
echo "📊 Statut des services:"
docker compose ps
echo ""

# 12. Vérifier Essentia
echo "🔍 Vérification d'Essentia..."
docker compose logs backend | grep -i essentia | tail -3
echo ""

# 13. Afficher les informations finales
echo "✅ Installation terminée !"
echo ""
echo "🌐 Application accessible sur:"
SERVER_IP=$(hostname -I | awk '{print $1}')
echo "   - Backend API: http://$SERVER_IP:8000"
echo "   - API Docs: http://$SERVER_IP:8000/docs"
echo "   - Frontend: http://$SERVER_IP:3000"
echo ""
echo "📝 Commandes utiles:"
echo "   - Voir les logs: docker compose logs -f"
echo "   - Arrêter: docker compose down"
echo "   - Redémarrer: docker compose restart"
echo ""
echo "🎵 Pour scanner vos fichiers audio:"
echo "   docker compose exec backend python -m src.cli.scanner /path/to/music"
