<?php
session_start();
require_once 'config.php';

// Vérifier que l'utilisateur est admin
if (!isset($_SESSION['user_role']) || !in_array($_SESSION['user_role'], ['super_admin', 'admin'])) {
    echo json_encode(['success' => false, 'message' => 'Accès non autorisé']);
    exit();
}

$id_etudiant = isset($_GET['id_etudiant']) ? (int)$_GET['id_etudiant'] : 0;

if (!$id_etudiant) {
    echo json_encode(['success' => false, 'message' => 'ID étudiant manquant']);
    exit();
}

// Nouvelle fonction pour calculer le taux d'absence par matière
function calculerTauxAbsenceMatiereAPI($pdo, $id_etudiant, $id_matiere) {
    $result = [
        'taux' => 0,
        'absences' => 0,
        'heures_total' => 0
    ];
    
    try {
        // Récupérer le nombre d'heures total de la matière
        $stmt = $pdo->prepare("SELECT nbr_heure_semaine FROM matieres WHERE id_matiere = ?");
        $stmt->execute([$id_matiere]);
        $matiere = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if ($matiere && $matiere['nbr_heure_semaine'] > 0) {
            $result['heures_total'] = $matiere['nbr_heure_semaine'];
        } else {
            $stmt = $pdo->prepare("
                SELECT SUM(TIMESTAMPDIFF(HOUR, heure_debut, heure_fin)) as total_heures
                FROM seance 
                WHERE id_matiere = ?
            ");
            $stmt->execute([$id_matiere]);
            $seances = $stmt->fetch(PDO::FETCH_ASSOC);
            $result['heures_total'] = $seances['total_heures'] ?? 1;
        }
        
        // Compter le nombre d'absences
        $stmt = $pdo->prepare("
            SELECT COUNT(*) as nb_absences
            FROM absence_etudiant a
            JOIN seance s ON a.id_seance = s.id_seance
            WHERE a.id_etudiant = ? AND s.id_matiere = ?
        ");
        $stmt->execute([$id_etudiant, $id_matiere]);
        $absences = $stmt->fetch(PDO::FETCH_ASSOC);
        
        $result['absences'] = $absences['nb_absences'] ?? 0;
        
        // Taux = (nombre absences / heures total) * 100
        if ($result['heures_total'] > 0) {
            $result['taux'] = round(($result['absences'] / $result['heures_total']) * 100, 2);
        }
        
    } catch(Exception $e) {
        error_log("Erreur API: " . $e->getMessage());
    }
    
    return $result;
}

try {
    // Récupérer les informations de l'étudiant
    $stmt = $pdo->prepare("SELECT nom, prenom FROM etudiants WHERE id_etudiant = ?");
    $stmt->execute([$id_etudiant]);
    $etudiant = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$etudiant) {
        echo json_encode(['success' => false, 'message' => 'Étudiant non trouvé']);
        exit();
    }
    
    // Récupérer toutes les matières suivies par l'étudiant
    $stmt = $pdo->prepare("
        SELECT DISTINCT m.id_matiere, m.nom_matiere, m.nbr_heure_semaine
        FROM matieres m
        JOIN seance s ON m.id_matiere = s.id_matiere
        JOIN etudiants e ON s.id_groupe = e.id_groupe
        WHERE e.id_etudiant = ?
    ");
    $stmt->execute([$id_etudiant]);
    $matieres = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    $absences_par_matiere = [];
    $total_absences = 0;
    $total_heures_cours = 0;
    
    foreach ($matieres as $matiere) {
        $taux = calculerTauxAbsenceMatiereAPI($pdo, $id_etudiant, $matiere['id_matiere']);
        $absences_par_matiere[$matiere['id_matiere']] = [
            'nom_matiere' => $matiere['nom_matiere'],
            'taux' => $taux['taux'],
            'absences' => $taux['absences'],
            'heures_total' => $taux['heures_total']
        ];
        $total_absences += $taux['absences'];
        $total_heures_cours += $taux['heures_total'];
    }
    
    $taux_global = $total_heures_cours > 0 ? round(($total_absences / $total_heures_cours) * 100, 2) : 0;
    
    // Récupérer la liste détaillée des absences
    $stmt = $pdo->prepare("
        SELECT a.*, 
               s.jour,
               DATE_FORMAT(s.heure_debut, '%H:%i') as heure_debut,
               DATE_FORMAT(s.heure_fin, '%H:%i') as heure_fin,
               m.nom_matiere,
               DATE_FORMAT(a.date_absence, '%d/%m/%Y') as date_absence_formatted,
               CASE 
                   WHEN a.justifie = 'oui' THEN 'justifiee'
                   ELSE 'non_justifiee'
               END as statut
        FROM absence_etudiant a
        JOIN seance s ON a.id_seance = s.id_seance
        JOIN matieres m ON s.id_matiere = m.id_matiere
        WHERE a.id_etudiant = ?
        ORDER BY a.date_absence DESC, s.jour, s.heure_debut
    ");
    $stmt->execute([$id_etudiant]);
    $absences_list = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    echo json_encode([
        'success' => true,
        'etudiant_nom' => $etudiant['nom'] . ' ' . $etudiant['prenom'],
        'total_absences' => $total_absences,
        'taux_global' => $taux_global,
        'total_heures_cours' => $total_heures_cours,
        'absences_par_matiere' => $absences_par_matiere,
        'absences_list' => $absences_list
    ]);
    
} catch(Exception $e) {
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}
?>