<?php

function calculerTauxAbsenceMatiere($pdo, $id_etudiant, $id_matiere) {
    $result = [
        'taux' => 0,
        'absences' => 0,
        'heures_total' => 0,
        'heures_absentes' => 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 {
            // Alternative: calculer les heures à partir des séances
            $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; // Éviter division par zéro
        }
        
        // Compter le nombre d'absences pour cette matière
        $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;
        
        // Calcul du taux : (nombre d'absences / nombre d'heures total) * 100
        if ($result['heures_total'] > 0) {
            $result['taux'] = round(($result['absences'] / $result['heures_total']) * 100, 2);
        }
        
    } catch(Exception $e) {
        error_log("Erreur calculTauxAbsenceMatiere: " . $e->getMessage());
    }
    
    return $result;
}

function calculerTauxAbsenceGlobal($pdo, $id_etudiant) {
    $result = [
        'total_absences' => 0,
        'total_heures_absentes' => 0,
        'total_heures_cours' => 0,
        'taux_global' => 0,
        'absences_par_matiere' => []
    ];
    
    try {
        $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);
        
        $total_absences = 0;
        $total_heures_cours = 0;
        
        foreach ($matieres as $matiere) {
            $taux_matiere = calculerTauxAbsenceMatiere($pdo, $id_etudiant, $matiere['id_matiere']);
            $result['absences_par_matiere'][$matiere['id_matiere']] = [
                'nom_matiere' => $matiere['nom_matiere'],
                'taux' => $taux_matiere['taux'],
                'absences' => $taux_matiere['absences'],
                'heures_total' => $taux_matiere['heures_total']
            ];
            
            $total_absences += $taux_matiere['absences'];
            $total_heures_cours += $taux_matiere['heures_total'];
            $result['total_absences'] += $taux_matiere['absences'];
        }
        
        $result['total_heures_cours'] = $total_heures_cours;
        
        // Calcul du taux global : (total absences / total heures cours) * 100
        if ($total_heures_cours > 0) {
            $result['taux_global'] = round(($total_absences / $total_heures_cours) * 100, 2);
        }
        
    } catch(Exception $e) {
        error_log("Erreur calculerTauxAbsenceGlobal: " . $e->getMessage());
    }
    
    return $result;
}

function getCurrentUserInfo($pdo) {
    $id_user = $_SESSION['id_user'] ?? 0;
    try {
        $stmt = $pdo->prepare("SELECT * FROM utilisateur WHERE id_user = ?");
        $stmt->execute([$id_user]);
        return $stmt->fetch(PDO::FETCH_ASSOC);
    } catch(Exception $e) {
        return ['nom' => '', 'prenom' => ''];
    }
}
?>