<?php
/**
 * Script d'import des classes et élèves depuis fichiers JSON
 * Version FINALE - Utilise $db au lieu de $pdo
 */

require_once 'config/config.php';
require_once 'config/database.php';

// Récupérer la connexion BDD (variable $db)
$db = Database::getInstance()->getConnection();

// Configuration
$upload_dir = '/var/www/mathematiques/uploads/classes/';
$fichiers_json = ['2CV.json', 'TCV.json', '3PM.json', '1V.json','TCFA.json'];
$mot_de_passe_defaut = 'eleve2025';

// Statistiques
$stats = [
    'classes_creees' => 0,
    'eleves_crees' => 0,
    'erreurs' => 0,
    'details' => []
];

/**
 * Convertit un nom de classe en niveau complet
 */
function niveau_complet($nom_classe) {
    $premier_char = strtoupper(substr($nom_classe, 0, 1));
    
    switch($premier_char) {
        case '3':
            return 'Troisième';
        case '2':
            return 'Seconde';
        case '1':
            return 'Première';
        case 'T':
            return 'Terminale';
        default:
            return 'Autre';
    }
}

/**
 * Génère un login unique
 */
function generer_login_unique($prenom, $nom, $db) {
    $prenom_clean = strtolower(transliterate($prenom));
    $nom_clean = strtolower(transliterate($nom));
    
    $initiale = substr($prenom_clean, 0, 1);
    $login_base = $initiale . '.' . $nom_clean;
    
    $login = $login_base;
    $suffixe = 1;
    
    while (login_existe($login, $db)) {
        $suffixe++;
        $login = $login_base . $suffixe;
    }
    
    return $login;
}

/**
 * Enlève les accents
 */
function transliterate($str) {
    $unwanted_array = [
        'Š'=>'S', 'š'=>'s', 'Ž'=>'Z', 'ž'=>'z', 
        'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 
        'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 
        'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 
        'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 
        'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 
        'Þ'=>'B', 'ß'=>'Ss', 'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 
        'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 
        'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 
        'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 
        'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 
        'þ'=>'b', 'ÿ'=>'y'
    ];
    return strtr($str, $unwanted_array);
}

/**
 * Vérifie si un login existe
 */
function login_existe($login, $db) {
    $stmt = $db->prepare("SELECT COUNT(*) FROM utilisateurs WHERE login = ?");
    $stmt->execute([$login]);
    return $stmt->fetchColumn() > 0;
}

/**
 * Crée ou récupère une classe
 */
function creer_ou_recuperer_classe($nom_classe, $annee_scolaire, $db) {
    $stmt = $db->prepare("
        SELECT id_classe 
        FROM classes 
        WHERE nom_classe = ? AND annee_scolaire = ?
    ");
    $stmt->execute([$nom_classe, $annee_scolaire]);
    $classe_existante = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($classe_existante) {
        return [
            'id' => $classe_existante['id_classe'],
            'nouveau' => false
        ];
    }
    
    $niveau = niveau_complet($nom_classe);
    
    $stmt = $db->prepare("
        INSERT INTO classes (nom_classe, niveau, annee_scolaire, type_classe, actif)
        VALUES (?, ?, ?, 'reguliere', 1)
    ");
    $stmt->execute([$nom_classe, $niveau, $annee_scolaire]);
    
    return [
        'id' => $db->lastInsertId(),
        'nouveau' => true
    ];
}

/**
 * Crée un élève
 */
function creer_eleve($eleve_data, $id_classe, $mot_de_passe, $db) {
    $prenom = trim($eleve_data['prenom']);
    $nom = trim($eleve_data['nom']);
    
    $login = generer_login_unique($prenom, $nom, $db);
    $mot_de_passe_hash = password_hash($mot_de_passe, PASSWORD_DEFAULT);
    
    $stmt = $db->prepare("
        INSERT INTO utilisateurs (login, mot_de_passe, nom, prenom, id_type, id_classe, actif)
        VALUES (?, ?, ?, ?, 2, ?, 1)
    ");
    
    $stmt->execute([
        $login,
        $mot_de_passe_hash,
        $nom,
        $prenom,
        $id_classe
    ]);
    
    return [
        'id' => $db->lastInsertId(),
        'login' => $login,
        'nom' => $nom,
        'prenom' => $prenom
    ];
}

// Début du traitement
echo "<!DOCTYPE html>
<html lang='fr'>
<head>
    <meta charset='UTF-8'>
    <title>Import des classes</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; background: #f5f5f5; }
        .container { max-width: 1000px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
        h1 { color: #2c3e50; border-bottom: 3px solid #3498db; padding-bottom: 10px; }
        .classe { margin: 20px 0; padding: 15px; background: #ecf0f1; border-left: 4px solid #3498db; border-radius: 5px; }
        .success { color: #27ae60; font-weight: bold; }
        .error { color: #e74c3c; font-weight: bold; }
        .info { color: #2980b9; }
        .eleve { margin: 5px 0; padding: 8px; background: white; border-radius: 3px; font-size: 0.9em; }
        .stats { background: #3498db; color: white; padding: 20px; border-radius: 5px; margin: 20px 0; }
        .stats h2 { margin-top: 0; }
    </style>
</head>
<body>
    <div class='container'>
        <h1>🔧 Import des classes et élèves</h1>
";

try {
    foreach ($fichiers_json as $fichier) {
        $chemin_complet = $upload_dir . $fichier;
        
        echo "<div class='classe'>";
        echo "<h2>📁 Traitement de : $fichier</h2>";
        
        if (!file_exists($chemin_complet)) {
            echo "<p class='error'>❌ Fichier non trouvé : $chemin_complet</p>";
            $stats['erreurs']++;
            echo "</div>";
            continue;
        }
        
        $json_content = file_get_contents($chemin_complet);
        $data = json_decode($json_content, true);
        
        if (!$data || !isset($data['classe'])) {
            echo "<p class='error'>❌ Format JSON invalide</p>";
            $stats['erreurs']++;
            echo "</div>";
            continue;
        }
        
        $classe_data = $data['classe'];
        $nom_classe = $classe_data['nom'];
        $annee_scolaire = $classe_data['annee_scolaire'];
        $eleves = $classe_data['eleves'];
        
        echo "<p class='info'>📚 Classe: <strong>$nom_classe</strong> ($annee_scolaire)</p>";
        echo "<p class='info'>👥 Nombre d'élèves: <strong>" . count($eleves) . "</strong></p>";
        
        $result_classe = creer_ou_recuperer_classe($nom_classe, $annee_scolaire, $db);
        $id_classe = $result_classe['id'];
        
        if ($result_classe['nouveau']) {
            echo "<p class='success'>✅ Classe créée (ID: $id_classe)</p>";
            $stats['classes_creees']++;
        } else {
            echo "<p class='info'>ℹ️  Classe existante (ID: $id_classe)</p>";
        }
        
        echo "<div style='margin-top: 15px;'>";
        echo "<strong>Import des élèves :</strong><br>";
        
        $eleves_crees_classe = 0;
        foreach ($eleves as $eleve) {
            try {
                $result_eleve = creer_eleve($eleve, $id_classe, $mot_de_passe_defaut, $db);
                
                echo "<div class='eleve'>";
                echo "✅ {$result_eleve['prenom']} {$result_eleve['nom']} → ";
                echo "<code>{$result_eleve['login']}</code> (ID: {$result_eleve['id']})";
                echo "</div>";
                
                $stats['eleves_crees']++;
                $eleves_crees_classe++;
            } catch (Exception $e) {
                echo "<div class='eleve error'>";
                echo "❌ {$eleve['prenom']} {$eleve['nom']} : " . $e->getMessage();
                echo "</div>";
                $stats['erreurs']++;
            }
        }
        
        echo "</div>";
        echo "<p class='success' style='margin-top: 10px;'>✅ $eleves_crees_classe élève(s) créé(s)</p>";
        echo "</div>";
    }
    
    echo "
        <div class='stats'>
            <h2>📊 Statistiques d'import</h2>
            <p><strong>Classes créées :</strong> {$stats['classes_creees']}</p>
            <p><strong>Élèves créés :</strong> {$stats['eleves_crees']}</p>
            <p><strong>Erreurs :</strong> {$stats['erreurs']}</p>
            <p><strong>Mot de passe par défaut :</strong> <code>$mot_de_passe_defaut</code></p>
        </div>
    ";
    
    if ($stats['eleves_crees'] > 0) {
        echo "
            <div style='background: #27ae60; color: white; padding: 20px; border-radius: 5px; margin-top: 20px;'>
                <h3 style='margin-top: 0;'>🎉 Import réussi !</h3>
                <p><strong>{$stats['eleves_crees']} élèves</strong> importés avec succès.</p>
                <p>Login : initiale_prenom.nom (ex: j.dupont)</p>
                <p>Mot de passe : $mot_de_passe_defaut</p>
            </div>
        ";
    }
    
} catch (Exception $e) {
    echo "<div class='error'>";
    echo "<h2>❌ Erreur fatale</h2>";
    echo "<p>" . htmlspecialchars($e->getMessage()) . "</p>";
    echo "</div>";
}

echo "
    </div>
</body>
</html>
";
?>
