#!/bin/bash

# Script de déploiement de la nouvelle architecture CLEO
# Version: 2.0.1
# Date: 2025-09-11

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

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

echo -e "${GREEN}================================================${NC}"
echo -e "${GREEN}   Déploiement CLEO - Nouvelle Architecture    ${NC}"
echo -e "${GREEN}================================================${NC}"
echo ""

# Vérifier qu'on est dans le bon répertoire
if [ ! -f "index.php" ] || [ ! -d "config" ]; then
    echo -e "${RED}Erreur: Ce script doit être exécuté depuis la racine du projet CLEO${NC}"
    exit 1
fi

# Fonction pour demander confirmation
confirm() {
    read -p "$1 [y/N] " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        return 1
    fi
    return 0
}

# 1. Vérification du fichier .env
echo -e "${YELLOW}1. Vérification de la configuration...${NC}"
if [ ! -f ".env" ]; then
    echo -e "${RED}   Le fichier .env n'existe pas!${NC}"
    echo "   Copie de .env.example vers .env..."
    cp .env.example .env
    echo -e "${YELLOW}   IMPORTANT: Veuillez éditer le fichier .env avec vos paramètres${NC}"
    exit 1
fi
echo -e "${GREEN}   ✓ Fichier .env trouvé${NC}"

# 2. Backup des anciens fichiers
echo -e "${YELLOW}2. Sauvegarde des fichiers actuels...${NC}"
BACKUP_DIR="backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"

# Sauvegarder les fichiers critiques
if [ -f "config/conf.php" ]; then
    cp config/conf.php "$BACKUP_DIR/conf.php.bak"
    echo "   - config/conf.php sauvegardé"
fi

if [ -f "pub/res/d6/d6_tools.php" ]; then
    cp pub/res/d6/d6_tools.php "$BACKUP_DIR/d6_tools.php.bak"
    echo "   - pub/res/d6/d6_tools.php sauvegardé"
fi

echo -e "${GREEN}   ✓ Sauvegarde effectuée dans $BACKUP_DIR${NC}"

# 3. Vérification de la connexion à la base de données
echo -e "${YELLOW}3. Test de connexion à la base de données...${NC}"

# Lire les paramètres depuis .env
source .env

# Tester la connexion MySQL
mysql -h"$DB_HOST" -u"$DB_USERNAME" -p"$DB_PASSWORD" -e "SELECT 1" >/dev/null 2>&1
if [ $? -eq 0 ]; then
    echo -e "${GREEN}   ✓ Connexion à MariaDB réussie${NC}"
else
    echo -e "${RED}   ✗ Impossible de se connecter à MariaDB${NC}"
    echo "   Vérifiez les paramètres dans .env"
    exit 1
fi

# 4. Exécution du script de migration SQL
echo -e "${YELLOW}4. Migration de la base de données...${NC}"
if confirm "   Voulez-vous exécuter le script de migration SQL?"; then
    echo "   Exécution de migrate_to_cleo.sql..."
    mysql -h"$DB_HOST" -u"$DB_USERNAME" -p"$DB_PASSWORD" < migration/migrate_to_cleo.sql
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}   ✓ Migration SQL effectuée${NC}"
    else
        echo -e "${RED}   ✗ Erreur lors de la migration SQL${NC}"
        exit 1
    fi
else
    echo "   Migration SQL ignorée"
fi

# 5. Activation des nouveaux fichiers
echo -e "${YELLOW}5. Activation de la nouvelle architecture...${NC}"

# Remplacer conf.php
if [ -f "config/conf_new.php" ]; then
    mv config/conf.php config/conf_old.php 2>/dev/null || true
    cp config/conf_new.php config/conf.php
    echo -e "${GREEN}   ✓ config/conf.php mis à jour${NC}"
fi

# Remplacer d6_tools.php
if [ -f "pub/res/d6/d6_tools_new.php" ]; then
    mv pub/res/d6/d6_tools.php pub/res/d6/d6_tools_old.php 2>/dev/null || true
    cp pub/res/d6/d6_tools_new.php pub/res/d6/d6_tools.php
    echo -e "${GREEN}   ✓ d6_tools.php mis à jour${NC}"
fi

# 6. Vérification des permissions
echo -e "${YELLOW}6. Vérification des permissions...${NC}"
chmod 644 config/conf.php
chmod 644 pub/res/d6/d6_tools.php
chmod 600 .env
echo -e "${GREEN}   ✓ Permissions mises à jour${NC}"

# 7. Création du répertoire de logs si nécessaire
echo -e "${YELLOW}7. Création du répertoire de logs...${NC}"
mkdir -p log
chmod 755 log
echo -e "${GREEN}   ✓ Répertoire log créé${NC}"

# 8. Test de l'application
echo -e "${YELLOW}8. Test de connexion à la base CLEO...${NC}"
php -r "
require_once 'config/Database.php';
try {
    \$db = Database::getInstance();
    echo '   ✓ Connexion PDO réussie' . PHP_EOL;
    \$result = \$db->fetchOne('SELECT COUNT(*) as nb FROM users');
    echo '   ✓ ' . \$result['nb'] . ' utilisateurs trouvés' . PHP_EOL;
} catch (Exception \$e) {
    echo '   ✗ Erreur: ' . \$e->getMessage() . PHP_EOL;
    exit(1);
}
"

if [ $? -eq 0 ]; then
    echo -e "${GREEN}   ✓ Tests réussis${NC}"
else
    echo -e "${RED}   ✗ Tests échoués${NC}"
    echo "   Utilisez ./migration/rollback.sh pour revenir en arrière"
    exit 1
fi

echo ""
echo -e "${GREEN}================================================${NC}"
echo -e "${GREEN}   Déploiement terminé avec succès!            ${NC}"
echo -e "${GREEN}================================================${NC}"
echo ""
echo "Prochaines étapes:"
echo "1. Testez l'application dans votre navigateur"
echo "2. Vérifiez les logs dans le répertoire /log"
echo "3. En cas de problème, utilisez ./migration/rollback.sh"
echo ""
echo "Configuration actuelle:"
echo "  - Base de données: $DB_DATABASE sur $DB_HOST"
echo "  - Environnement: $APP_ENV"
echo "  - Debug: $APP_DEBUG"
echo ""