// ============================================
// main.js - Gestion des Présences
// Version complète avec heure, durée et jour
// ============================================

document.addEventListener('DOMContentLoaded', function() {

    console.log('=== DÉMARRAGE DU SCRIPT PRÉSENCES ===');

    // ============================================
    // VARIABLES GLOBALES
    // ============================================
    let studentsData = [];
    let currentInscriptionModuleId = null;
    let checkConflictTimeout = null;

    // Éléments DOM
    const filterAnnee = document.getElementById('filterAnnee');
    const filterFiliere = document.getElementById('filterFiliere');
    const filterSemestre = document.getElementById('filterSemestre');
    const filterModule = document.getElementById('filterModule');

    console.log('Éléments trouvés:', {
        filterAnnee: !!filterAnnee,
        filterFiliere: !!filterFiliere,
        filterSemestre: !!filterSemestre,
        filterModule: !!filterModule
    });

    // ============================================
    // FONCTIONS UTILITAIRES
    // ============================================

    /**
     * Échapper le HTML pour éviter les injections XSS
     */
    function escapeHtml(text) {
        if (!text) return '';
        var div = document.createElement('div');
        div.textContent = text;
        return div.innerHTML;
    }

    /**
     * Formater une date en français
     */
    function formatDate(dateStr) {
        if (!dateStr) return '-';
        var d = new Date(dateStr + 'T00:00:00');
        return d.toLocaleDateString('fr-FR', {
            day: '2-digit',
            month: 'short',
            year: 'numeric'
        });
    }

    /**
     * Obtenir le jour de la semaine à partir d'une date
     */
    function getJourSemaine(dateStr) {
        if (!dateStr) return '-';
        var d = new Date(dateStr + 'T00:00:00');
        var jours = ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'];
        return jours[d.getDay()];
    }

    /**
     * Afficher un message toast
     */
    function showToast(message, type) {
        type = type || 'info';
        var container = document.getElementById('toastContainer');
        if (!container) {
            alert(message);
            return;
        }
        var toast = document.createElement('div');
        toast.className = 'toast toast-' + type;
        toast.innerHTML = '<span>' + message + '</span><button onclick="this.parentElement.remove()">&times;</button>';
        container.appendChild(toast);
        setTimeout(function() {
            if (toast.parentElement) toast.remove();
        }, 4000);
    }

    // ============================================
    // FONCTION POUR APPELER L'API
    // ============================================
    function apiCall(action, params) {
        var url = '/est-concours/model/api/presence.php?action=' + action;
        for (var key in params) {
            if (params.hasOwnProperty(key)) {
                url += '&' + key + '=' + encodeURIComponent(params[key]);
            }
        }
        console.log('🔵 Appel API:', url);
        return fetch(url)
            .then(function(response) {
                console.log('🔵 Status HTTP:', response.status);
                if (!response.ok) {
                    throw new Error('HTTP ' + response.status);
                }
                return response.json();
            })
            .then(function(data) {
                console.log('🔵 Données reçues:', data);
                return data;
            })
            .catch(function(error) {
                console.error('🔴 Erreur API:', error);
                throw error;
            });
    }

    // ============================================
    // CHARGEMENT DES FILTRES
    // ============================================

    /**
     * Charger les filières quand l'année change
     */
    if (filterAnnee) {
        filterAnnee.addEventListener('change', function() {
            var annee = this.value;
            console.log('📅 Année sélectionnée:', annee);

            // Réinitialiser
            filterFiliere.innerHTML = '<option value="">-- Sélectionner --</option>';
            filterSemestre.innerHTML = '<option value="">-- Sélectionner --</option>';
            filterModule.innerHTML = '<option value="">-- Sélectionner --</option>';

            if (!annee) {
                return;
            }

            filterFiliere.innerHTML = '<option value="">⏳ Chargement...</option>';

            apiCall('get_filieres', { annee: annee })
                .then(function(data) {
                    filterFiliere.innerHTML = '<option value="">-- Sélectionner --</option>';

                    if (data.success && data.data && data.data.length > 0) {
                        for (var i = 0; i < data.data.length; i++) {
                            var filiere = data.data[i];
                            var option = document.createElement('option');
                            option.value = filiere.id;
                            option.textContent = filiere.libelle + ' (' + filiere.code + ')';
                            filterFiliere.appendChild(option);
                        }
                        console.log('✅ ' + data.data.length + ' filières chargées');
                    } else {
                        filterFiliere.innerHTML = '<option value="">❌ Aucune filière trouvée</option>';
                    }
                })
                .catch(function(error) {
                    filterFiliere.innerHTML = '<option value="">❌ Erreur: ' + error.message + '</option>';
                    console.error('🔴 Erreur:', error);
                    showToast('Erreur de chargement des filières', 'error');
                });
        });
    }

    /**
     * Charger les semestres quand la filière change
     */
    if (filterFiliere) {
        filterFiliere.addEventListener('change', function() {
            var annee = filterAnnee.value;
            var filiereId = this.value;

            console.log('📚 Filière sélectionnée:', filiereId);

            filterSemestre.innerHTML = '<option value="">-- Sélectionner --</option>';
            filterModule.innerHTML = '<option value="">-- Sélectionner --</option>';

            if (!filiereId || !annee) {
                return;
            }

            filterSemestre.innerHTML = '<option value="">⏳ Chargement...</option>';

            apiCall('get_semestres', {
                filiere_id: filiereId,
                annee: annee
            })
                .then(function(data) {
                    filterSemestre.innerHTML = '<option value="">-- Sélectionner --</option>';

                    if (data.success && data.data && data.data.length > 0) {
                        for (var i = 0; i < data.data.length; i++) {
                            var semestre = data.data[i];
                            var option = document.createElement('option');
                            option.value = semestre.id;
                            option.textContent = semestre.libelle;
                            filterSemestre.appendChild(option);
                        }
                        console.log('✅ ' + data.data.length + ' semestres chargés');
                    } else {
                        filterSemestre.innerHTML = '<option value="">❌ Aucun semestre trouvé</option>';
                    }
                })
                .catch(function(error) {
                    filterSemestre.innerHTML = '<option value="">❌ Erreur de chargement</option>';
                    console.error('🔴 Erreur:', error);
                    showToast('Erreur de chargement des semestres', 'error');
                });
        });
    }

    /**
     * Charger les modules quand le semestre change
     */
    if (filterSemestre) {
        filterSemestre.addEventListener('change', function() {
            var annee = filterAnnee.value;
            var filiereId = filterFiliere.value;
            var semestreId = this.value;

            console.log('📖 Semestre sélectionné:', semestreId);

            filterModule.innerHTML = '<option value="">-- Sélectionner --</option>';

            if (!semestreId || !filiereId || !annee) {
                return;
            }

            filterModule.innerHTML = '<option value="">⏳ Chargement...</option>';

            apiCall('get_modules', {
                filiere_id: filiereId,
                semestre_id: semestreId,
                annee: annee
            })
                .then(function(data) {
                    filterModule.innerHTML = '<option value="">-- Sélectionner --</option>';

                    if (data.success && data.data && data.data.length > 0) {
                        for (var i = 0; i < data.data.length; i++) {
                            var module = data.data[i];
                            var option = document.createElement('option');
                            option.value = module.inscription_module_id;
                            option.setAttribute('data-module', module.module_libelle);
                            option.setAttribute('data-prof', module.professeur);
                            option.setAttribute('data-nb', module.nb_etudiants || 0);
                            option.textContent = module.module_libelle + ' (' + module.professeur + ')';
                            filterModule.appendChild(option);
                        }
                        console.log('✅ ' + data.data.length + ' modules chargés');
                    } else {
                        filterModule.innerHTML = '<option value="">❌ Aucun module trouvé</option>';
                    }
                })
                .catch(function(error) {
                    filterModule.innerHTML = '<option value="">❌ Erreur de chargement</option>';
                    console.error('🔴 Erreur:', error);
                    showToast('Erreur de chargement des modules', 'error');
                });
        });
    }

    // ============================================
    // GESTION DES ÉTUDIANTS
    // ============================================

    /**
     * Charger les étudiants d'un module
     */
    window.loadStudents = function() {
        var inscriptionModuleId = filterModule.value;

        if (!inscriptionModuleId) {
            showToast('⚠️ Veuillez sélectionner un module', 'error');
            return;
        }

        currentInscriptionModuleId = inscriptionModuleId;
        var selectedOption = filterModule.options[filterModule.selectedIndex];

        // Afficher les infos du module
        var moduleName = document.getElementById('moduleName');
        var moduleProf = document.getElementById('moduleProf');
        var moduleNbStudents = document.getElementById('moduleNbStudents');
        var moduleInfo = document.getElementById('moduleInfo');
        var studentListContainer = document.getElementById('studentListContainer');
        var studentList = document.getElementById('studentList');

        if (moduleName) moduleName.textContent = selectedOption.getAttribute('data-module') || '-';
        if (moduleProf) moduleProf.textContent = selectedOption.getAttribute('data-prof') || '-';
        if (moduleNbStudents) moduleNbStudents.textContent = selectedOption.getAttribute('data-nb') || '0';
        if (moduleInfo) moduleInfo.style.display = 'block';
        if (studentListContainer) studentListContainer.style.display = 'block';

        if (studentList) {
            studentList.innerHTML = '<div style="text-align:center;padding:40px;"><i class="fas fa-spinner fa-spin" style="font-size:40px;"></i><br>⏳ Chargement des étudiants...</div>';
        }

        apiCall('get_students', {
            inscription_module_id: inscriptionModuleId
        })
            .then(function(result) {
                if (result.success) {
                    studentsData = result.data || [];
                    renderStudentList(studentsData);
                } else {
                    showToast('❌ Erreur: ' + (result.message || 'Inconnue'), 'error');
                }
            })
            .catch(function(error) {
                console.error('🔴 Erreur:', error);
                showToast('❌ Erreur de connexion: ' + error.message, 'error');
            });
    };

    /**
     * Afficher la liste des étudiants
     */
    function renderStudentList(students) {
        var container = document.getElementById('studentList');
        var totalStudents = document.getElementById('totalStudents');

        if (totalStudents) totalStudents.textContent = '(' + students.length + ')';

        if (!students || students.length === 0) {
            if (container) {
                container.innerHTML = '<div style="text-align:center;padding:40px;color:#7f8c8d;">👥 Aucun étudiant trouvé</div>';
            }
            return;
        }

        var html = '<table><thead><tr>';
        html += '<th>#</th><th>NOM</th><th>PRÉNOM</th>';
        html += '<th style="text-align:center;">P</th>';
        html += '<th style="text-align:center;">A</th>';
        html += '<th style="text-align:center;">STATUT</th>';
        html += '<th>OBSERVATION</th></tr></thead><tbody>';

        for (var i = 0; i < students.length; i++) {
            var s = students[i];
            var isPresent = (s.present === 1);
            var statusText = isPresent ? '✅ Présent' : '❌ Absent';
            var descValue = s.description || '';

            html += '<tr>';
            html += '<td>' + (i + 1) + '</td>';
            html += '<td><strong>' + escapeHtml(s.nom) + '</strong></td>';
            html += '<td>' + escapeHtml(s.prenom) + '</td>';
            html += '<td style="text-align:center;">';
            html += '<button class="btn-status' + (isPresent ? ' active-present' : '') + '" onclick="setStatus(' + s.id + ', 1)">P</button>';
            html += '</td>';
            html += '<td style="text-align:center;">';
            html += '<button class="btn-status' + (!isPresent ? ' active-absent' : '') + '" onclick="setStatus(' + s.id + ', 0)">A</button>';
            html += '</td>';
            html += '<td style="text-align:center;">';
            html += '<span class="status-legend ' + (isPresent ? 'present' : 'absent') + '">' + statusText + '</span>';
            html += '</td>';
            html += '<td>';
            html += '<input type="text" value="' + escapeHtml(descValue) + '" placeholder="Observation..." onchange="updateDescription(' + s.id + ', this.value)" style="width:100%;padding:5px;border:1px solid #ddd;border-radius:4px;">';
            html += '</td>';
            html += '</tr>';
        }

        html += '</tbody></table>';
        if (container) container.innerHTML = html;
    }

    // ============================================
    // GESTION DES PRÉSENCES
    // ============================================

    /**
     * Changer le statut d'un étudiant
     */
    window.setStatus = function(studentId, status) {
        for (var i = 0; i < studentsData.length; i++) {
            if (studentsData[i].id === studentId) {
                studentsData[i].present = status;
                break;
            }
        }
        renderStudentList(studentsData);
    };

    /**
     * Mettre à jour la description d'un étudiant
     */
    window.updateDescription = function(studentId, value) {
        for (var i = 0; i < studentsData.length; i++) {
            if (studentsData[i].id === studentId) {
                studentsData[i].description = value || null;
                break;
            }
        }
    };

    /**
     * Marquer tous les étudiants comme présents
     */
    window.markAllPresent = function() {
        for (var i = 0; i < studentsData.length; i++) {
            studentsData[i].present = 1;
        }
        renderStudentList(studentsData);
        showToast('✅ Tous les étudiants marqués présents', 'success');
    };

    /**
     * Marquer tous les étudiants comme absents
     */
    window.markAllAbsent = function() {
        for (var i = 0; i < studentsData.length; i++) {
            studentsData[i].present = 0;
        }
        renderStudentList(studentsData);
        showToast('✅ Tous les étudiants marqués absents', 'success');
    };

    // ============================================
    // VÉRIFICATION DES CONFLITS
    // ============================================

    /**
     * Vérifier les conflits de date/heure
     */
    function checkConflict() {
        var affectationId = document.getElementById('affectation_id') ? document.getElementById('affectation_id').value : filterModule.value;
        var date = document.getElementById('date_seance') ? document.getElementById('date_seance').value : '';
        var heure = document.getElementById('heure_debut') ? document.getElementById('heure_debut').value : '';
        var presenceId = document.getElementById('presenceId') ? document.getElementById('presenceId').value : '';

        // Mettre à jour le jour de la semaine
        if (date) {
            var jourInfo = document.getElementById('jourInfo');
            if (jourInfo) jourInfo.textContent = getJourSemaine(date);
        }

        if (!affectationId || !date || !heure) {
            var warning = document.getElementById('conflictWarning');
            if (warning) warning.style.display = 'none';
            return;
        }

        if (checkConflictTimeout) {
            clearTimeout(checkConflictTimeout);
        }

        checkConflictTimeout = setTimeout(function() {
            var url = '/est-concours/model/api/presence.php?action=check_conflict&inscription_module_id=' + affectationId + '&date=' + date + '&heure=' + heure + (presenceId ? '&exclude_id=' + presenceId : '');

            fetch(url)
                .then(function(r) { return r.json(); })
                .then(function(result) {
                    var warning = document.getElementById('conflictWarning');
                    if (warning && result.success && result.hasConflict) {
                        warning.style.display = 'block';
                        var conflictMessage = document.getElementById('conflictMessage');
                        if (conflictMessage) {
                            conflictMessage.textContent = '⚠️ Une séance existe déjà pour ce cours le ' + formatDate(date) + ' à ' + heure + ' (' + (result.existingLibelle || 'Séance existante') + ')';
                        }
                    } else if (warning) {
                        warning.style.display = 'none';
                    }
                })
                .catch(function() {});
        }, 500);
    }

    // ============================================
    // SAUVEGARDE DES PRÉSENCES
    // ============================================

    /**
     * Enregistrer les présences (avec heure, durée, jour)
     */
    window.savePresence = function() {
        if (!currentInscriptionModuleId) {
            showToast('⚠️ Veuillez sélectionner un module', 'error');
            return;
        }
        if (studentsData.length === 0) {
            showToast('⚠️ Aucun étudiant à enregistrer', 'error');
            return;
        }

        // Récupérer les valeurs des champs
        var date = document.getElementById('date_seance') ? document.getElementById('date_seance').value : new Date().toISOString().split('T')[0];
        var heure = document.getElementById('heure_debut') ? document.getElementById('heure_debut').value : '08:00';
        var nbHeures = document.getElementById('nb_heures') ? document.getElementById('nb_heures').value : 2;
        var libelle = document.getElementById('libelle_seance') ? document.getElementById('libelle_seance').value : '';
        var presenceId = document.getElementById('presenceId') ? document.getElementById('presenceId').value : '';

        // Construire les données
        var presences = [];
        for (var i = 0; i < studentsData.length; i++) {
            presences.push({
                student_id: studentsData[i].id,
                present: studentsData[i].present !== undefined ? studentsData[i].present : 0,
                description: studentsData[i].description || null
            });
        }

        var data = {
            inscription_module_id: parseInt(currentInscriptionModuleId),
            date: date,
            heure_debut: heure,
            nb_heures: parseInt(nbHeures),
            libelle: libelle || 'Séance du ' + formatDate(date) + ' à ' + heure,
            presences: presences
        };

        console.log('📤 Envoi des données:', data);

        // Vérifier les conflits
        var checkUrl = '/est-concours/model/api/presence.php?action=check_conflict&inscription_module_id=' + currentInscriptionModuleId + '&date=' + date + '&heure=' + heure + (presenceId ? '&exclude_id=' + presenceId : '');

        fetch(checkUrl)
            .then(function(r) { return r.json(); })
            .then(function(checkResult) {
                if (checkResult.success && checkResult.hasConflict) {
                    if (!confirm('⚠️ Une séance existe déjà pour ce cours le ' + formatDate(date) + ' à ' + heure + '.\n\nVoulez-vous quand même enregistrer ?')) {
                        return Promise.reject('Annulé par l\'utilisateur');
                    }
                }

                var url = presenceId ?
                    '/est-concours/model/api/presence.php?action=update&id=' + presenceId :
                    '/est-concours/model/api/presence.php';

                var method = presenceId ? 'PUT' : 'POST';

                return fetch(url, {
                    method: method,
                    headers: { 'Content-Type': 'application/json' },
                    body: JSON.stringify(data)
                });
            })
            .then(function(response) {
                if (!response) return;
                return response.json();
            })
            .then(function(result) {
                if (result && result.success) {
                    showToast('✅ Feuille de présence enregistrée avec succès', 'success');
                    var modal = document.getElementById('presenceModal');
                    if (modal) modal.classList.remove('active');
                    setTimeout(function() { location.reload(); }, 1000);
                } else if (result) {
                    showToast('❌ Erreur: ' + result.message, 'error');
                }
            })
            .catch(function(error) {
                if (error === 'Annulé par l\'utilisateur') return;
                console.error('🔴 Erreur:', error);
                showToast('❌ Erreur de connexion', 'error');
            });
    };

    // ============================================
    // MODALES
    // ============================================

    /**
     * Ouvrir la modale de nouvelle séance
     */
    window.openPresenceModal = function(data) {
        var modal = document.getElementById('presenceModal');
        if (!modal) {
            showToast('⚠️ Modale non trouvée', 'error');
            return;
        }

        if (data && data.id) {
            // Mode édition
            document.getElementById('presenceId').value = data.id;
            document.getElementById('presenceModalTitle').innerHTML =
                '<i class="fas fa-edit" style="color:#f39c12;"></i> Modifier la feuille de présence';
            loadPresenceData(data.id);
        } else {
            // Mode création
            document.getElementById('presenceId').value = '';
            document.getElementById('presenceModalTitle').innerHTML =
                '<i class="fas fa-clipboard-list" style="color:#27ae60;"></i> Feuille de présence - Nouvelle séance';

            var now = new Date();
            var dateInput = document.getElementById('date_seance');
            var heureInput = document.getElementById('heure_debut');
            var nbHeuresInput = document.getElementById('nb_heures');
            var libelleInput = document.getElementById('libelle_seance');
            var affectationId = document.getElementById('affectation_id');

            if (dateInput) dateInput.value = now.toISOString().split('T')[0];
            if (heureInput) heureInput.value = '08:00';
            if (nbHeuresInput) nbHeuresInput.value = '2';
            if (libelleInput) libelleInput.value = '';
            if (affectationId) affectationId.value = filterModule.value;

            // Charger les étudiants
            loadStudentsForAffectation(filterModule.value);
        }

        modal.classList.add('active');
        document.body.style.overflow = 'hidden';
    };

    /**
     * Fermer la modale de présence
     */
    window.closePresenceModal = function() {
        var modal = document.getElementById('presenceModal');
        if (modal) {
            modal.classList.remove('active');
            document.body.style.overflow = '';
        }
    };

    /**
     * Charger les données d'une séance pour édition
     */
    function loadPresenceData(id) {
        apiCall('get', { id: id })
            .then(function(result) {
                if (result.success) {
                    var data = result.data;
                    var affectationId = document.getElementById('affectation_id');
                    var dateInput = document.getElementById('date_seance');
                    var heureInput = document.getElementById('heure_debut');
                    var nbHeuresInput = document.getElementById('nb_heures');
                    var libelleInput = document.getElementById('libelle_seance');

                    if (affectationId) affectationId.value = data.affectation_id || data.inscription_module_id;
                    if (dateInput) dateInput.value = data.date_seance;
                    if (heureInput) heureInput.value = data.heure_debut || '08:00';
                    if (nbHeuresInput) nbHeuresInput.value = data.nb_heures || 2;
                    if (libelleInput) libelleInput.value = data.libelle || '';

                    var jourInfo = document.getElementById('jourInfo');
                    if (jourInfo) jourInfo.textContent = data.jour_semaine || getJourSemaine(data.date_seance);

                    studentsData = data.students || [];
                    renderStudentList(studentsData);
                    checkConflict();
                } else {
                    showToast('❌ Erreur: ' + result.message, 'error');
                }
            })
            .catch(function(error) {
                console.error('🔴 Erreur:', error);
                showToast('❌ Erreur de connexion', 'error');
            });
    }

    /**
     * Charger les étudiants pour une affectation
     */
    function loadStudentsForAffectation(affectationId) {
        if (!affectationId) {
            var studentList = document.getElementById('studentList');
            if (studentList) {
                studentList.innerHTML = '<div style="text-align:center;padding:40px;color:#7f8c8d;"><i class="fas fa-hand-pointer" style="font-size:40px;display:block;margin-bottom:10px;"></i>Sélectionnez un cours pour charger les étudiants</div>';
            }
            var totalStudents = document.getElementById('totalStudents');
            if (totalStudents) totalStudents.textContent = '(0)';
            return;
        }

        apiCall('get_students', { inscription_module_id: affectationId })
            .then(function(result) {
                if (result.success) {
                    studentsData = (result.data || []).map(function(s) {
                        return {
                            ...s,
                            present: 0,
                            description: null
                        };
                    });
                    renderStudentList(studentsData);
                    checkConflict();
                } else {
                    showToast('❌ Erreur: ' + result.message, 'error');
                }
            })
            .catch(function(error) {
                console.error('🔴 Erreur:', error);
                showToast('❌ Erreur de connexion', 'error');
            });
    }

    // ============================================
    // AUTRES FONCTIONS
    // ============================================

    /**
     * Réinitialiser les filtres
     */
    window.resetFilters = function() {
        if (filterAnnee) filterAnnee.value = '';
        if (filterFiliere) filterFiliere.innerHTML = '<option value="">-- Sélectionner --</option>';
        if (filterSemestre) filterSemestre.innerHTML = '<option value="">-- Sélectionner --</option>';
        if (filterModule) filterModule.innerHTML = '<option value="">-- Sélectionner --</option>';

        var studentListContainer = document.getElementById('studentListContainer');
        var moduleInfo = document.getElementById('moduleInfo');

        if (studentListContainer) studentListContainer.style.display = 'none';
        if (moduleInfo) moduleInfo.style.display = 'none';

        studentsData = [];
        currentInscriptionModuleId = null;

        console.log('🔄 Filtres réinitialisés');
        showToast('🔄 Filtres réinitialisés', 'info');
    };

    /**
     * Voir les détails d'une séance
     */
    window.viewPresence = function(id) {
        if (typeof viewPresenceDetail === 'function') {
            viewPresenceDetail(id);
        } else {
            window.location.href = '/est-concours/app/view/admin/pedagogie/presence/view/?id=' + id;
        }
    };

    /**
     * Modifier une séance
     */
    window.editPresence = function(id) {
        if (typeof window.openPresenceModal === 'function') {
            window.openPresenceModal({ id: id });
        } else {
            window.location.href = '/est-concours/app/view/admin/pedagogie/presence/edit/?id=' + id;
        }
    };

    /**
     * Supprimer une séance
     */
    window.deletePresence = function(id) {
        if (!confirm('⚠️ Supprimer cette séance ?')) return;

        fetch('/est-concours/model/api/presence.php?action=delete&id=' + id, {
            method: 'DELETE'
        })
            .then(function(response) {
                if (!response.ok) {
                    throw new Error('HTTP ' + response.status);
                }
                return response.json();
            })
            .then(function(result) {
                if (result.success) {
                    showToast('✅ Séance supprimée avec succès', 'success');
                    setTimeout(function() { location.reload(); }, 1000);
                } else {
                    showToast('❌ Erreur: ' + (result.message || 'Inconnue'), 'error');
                }
            })
            .catch(function(error) {
                console.error('❌ Erreur:', error);
                showToast('❌ Erreur de connexion: ' + error.message, 'error');
            });
    };

    // ============================================
    // ÉCOUTEURS D'ÉVÉNEMENTS POUR LA MODALE
    // ============================================

    // Vérifier les conflits en temps réel
    document.addEventListener('change', function(e) {
        if (e.target.id === 'affectation_id' || e.target.id === 'date_seance' || e.target.id === 'heure_debut') {
            checkConflict();
        }
    });

    document.addEventListener('input', function(e) {
        if (e.target.id === 'date_seance' || e.target.id === 'heure_debut') {
            checkConflict();
        }
    });

    // Fermer la modale avec Escape
    document.addEventListener('keydown', function(e) {
        if (e.key === 'Escape') {
            var modal = document.getElementById('presenceModal');
            if (modal && modal.classList.contains('active')) {
                window.closePresenceModal();
            }
            var detailModal = document.getElementById('detailModal');
            if (detailModal && detailModal.classList.contains('active')) {
                closeDetailModal();
            }
        }
    });

    // Fermer la modale en cliquant sur l'overlay
    document.addEventListener('click', function(e) {
        var modal = document.getElementById('presenceModal');
        if (modal && e.target === modal) {
            window.closePresenceModal();
        }
        var detailModal = document.getElementById('detailModal');
        if (detailModal && e.target === detailModal) {
            closeDetailModal();
        }
    });

    // ============================================
    // INITIALISATION
    // ============================================

    console.log('🟢 Script initialisé');

    // Si une année est pré-sélectionnée, charger les filières
    if (filterAnnee && filterAnnee.value) {
        console.log('🔄 Année pré-sélectionnée:', filterAnnee.value);
        filterAnnee.dispatchEvent(new Event('change'));
    }

    console.log('=== FIN DE L\'INITIALISATION ===');
});

// ============================================
// FONCTIONS GLOBALES (pour les appels onclick)
// ============================================

/**
 * Fonction globale pour la vue des détails
 */
window.viewPresenceDetail = function(id) {
    if (typeof viewPresence === 'function') {
        viewPresence(id);
    }
};

/**
 * Fonction globale pour fermer la modale de détails
 */
window.closeDetailModal = function() {
    var modal = document.getElementById('detailModal');
    if (modal) {
        modal.classList.remove('active');
        document.body.style.overflow = '';
    }
};

// ============================================
// EXPORT POUR LA MODALE DE DÉTAILS
// ============================================

// Ces fonctions seront utilisées par view/modal.php
window.viewPresence = window.viewPresence || function(id) {
    window.location.href = '/est-concours/app/view/admin/pedagogie/presence/view/?id=' + id;
};

window.closeDetailModal = window.closeDetailModal || function() {
    var modal = document.getElementById('detailModal');
    if (modal) {
        modal.classList.remove('active');
        document.body.style.overflow = '';
    }
};

console.log('✅ main.js chargé avec succès');