#!/bin/bash

# ===========================================
# SCRIPT DE DÉPLOIEMENT PRODUCTION
# Microservice de Recherche Intelligente
# ===========================================

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

echo "🚀 Déploiement du microservice de recherche en production..."

# ===========================================
# VARIABLES DE CONFIGURATION
# ===========================================

PROJECT_DIR="/var/www/search-microservice"
BACKUP_DIR="/var/backups/search-microservice"
LOG_FILE="/var/log/search-microservice-deploy.log"
USER="www-data"
GROUP="www-data"

# ===========================================
# FONCTIONS UTILITAIRES
# ===========================================

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

error_exit() {
    log "❌ ERREUR: $1"
    exit 1
}

# ===========================================
# VÉRIFICATIONS PRÉALABLES
# ===========================================

log "🔍 Vérifications préalables..."

# Vérifier que le script est exécuté en tant que root ou avec sudo
if [[ $EUID -ne 0 ]]; then
   error_exit "Ce script doit être exécuté en tant que root ou avec sudo"
fi

# Vérifier que composer est installé
if ! command -v composer &> /dev/null; then
    error_exit "Composer n'est pas installé"
fi

# Vérifier que PHP 8.3 est disponible
if ! command -v php8.3 &> /dev/null; then
    error_exit "PHP 8.3 n'est pas installé"
fi

log "✅ Vérifications préalables terminées"

# ===========================================
# SAUVEGARDE
# ===========================================

log "💾 Création de la sauvegarde..."

# Créer le répertoire de sauvegarde s'il n'existe pas
mkdir -p "$BACKUP_DIR"

# Créer une sauvegarde avec timestamp
BACKUP_NAME="search-microservice-$(date +%Y%m%d_%H%M%S).tar.gz"

if [ -d "$PROJECT_DIR" ]; then
    tar -czf "$BACKUP_DIR/$BACKUP_NAME" -C "$(dirname $PROJECT_DIR)" "$(basename $PROJECT_DIR)"
    log "✅ Sauvegarde créée: $BACKUP_DIR/$BACKUP_NAME"
else
    log "⚠️  Aucun projet existant à sauvegarder"
fi

# ===========================================
# DÉPLOIEMENT
# ===========================================

log "📦 Déploiement du code..."

# Créer le répertoire du projet s'il n'existe pas
mkdir -p "$PROJECT_DIR"

# Se déplacer dans le répertoire du projet
cd "$PROJECT_DIR"

# Copier les fichiers (remplacez par votre méthode de déploiement)
# Exemples possibles :
# - rsync depuis un autre serveur
# - git pull depuis un repository
# - Copie depuis un répertoire local
# cp -r /source/path/* "$PROJECT_DIR/"

log "📁 Installation des dépendances..."

# Installer les dépendances Composer (production uniquement)
composer install --no-dev --optimize-autoloader --no-interaction

# ===========================================
# CONFIGURATION
# ===========================================

log "⚙️  Configuration de l'environnement..."

# Copier le fichier de configuration de production
if [ ! -f ".env" ]; then
    cp .env.prod .env
    log "✅ Fichier .env créé depuis .env.prod"
fi

# Vérifier que les variables obligatoires sont configurées
if ! grep -q "OPENAI_API_KEY=" .env || grep -q "your_openai_api_key_here" .env; then
    error_exit "La clé OpenAI n'est pas configurée dans .env"
fi

# ===========================================
# CACHE ET OPTIMISATIONS
# ===========================================

log "🗄️  Optimisations et cache..."

# Vider le cache
php bin/console cache:clear --env=prod --no-debug

# Préchauffer le cache
php bin/console cache:warmup --env=prod --no-debug

# ===========================================
# PERMISSIONS
# ===========================================

log "🔐 Configuration des permissions..."

# Définir les bonnes permissions
chown -R "$USER:$GROUP" "$PROJECT_DIR"
chmod -R 755 "$PROJECT_DIR"

# Permissions spéciales pour var/
chmod -R 777 "$PROJECT_DIR/var"

# ===========================================
# SERVICES
# ===========================================

log "🔄 Redémarrage des services..."

# Redémarrer PHP-FPM (ajustez selon votre configuration)
if systemctl is-active --quiet php8.3-fpm; then
    systemctl reload php8.3-fpm
    log "✅ PHP-FPM rechargé"
fi

# Redémarrer Nginx (si utilisé)
if systemctl is-active --quiet nginx; then
    systemctl reload nginx
    log "✅ Nginx rechargé"
fi

# ===========================================
# TESTS DE SANTÉ
# ===========================================

log "🏥 Tests de santé..."

# Attendre quelques secondes que les services se stabilisent
sleep 5

# Test de l'endpoint de santé
if curl -f -s http://localhost:8003/api/search/health > /dev/null; then
    log "✅ Le microservice répond correctement"
else
    error_exit "Le microservice ne répond pas à l'endpoint de santé"
fi

# ===========================================
# NETTOYAGE
# ===========================================

log "🧹 Nettoyage..."

# Supprimer les anciennes sauvegardes (garder seulement les 7 dernières)
find "$BACKUP_DIR" -name "search-microservice-*.tar.gz" -type f -mtime +7 -delete

# Supprimer les logs anciens (garder 30 jours)
find /var/log -name "*search-microservice*" -type f -mtime +30 -delete

# ===========================================
# FINALISATION
# ===========================================

log "🎉 Déploiement terminé avec succès!"
log "📍 Projet déployé dans: $PROJECT_DIR"
log "💾 Sauvegarde disponible: $BACKUP_DIR/$BACKUP_NAME"
log "📋 Log du déploiement: $LOG_FILE"

echo ""
echo "✅ Le microservice de recherche est maintenant en production"
echo "🌐 URL de test: http://votre-domaine.com:8003/api/search/health"
echo ""
echo "📚 Prochaines étapes recommandées:"
echo "  1. Configurez un reverse proxy (Nginx/Apache)"
echo "  2. Configurez le SSL/TLS"
echo "  3. Mettez en place une surveillance (monitoring)"
echo "  4. Configurez les sauvegardes automatiques"