// view/admin/documents/document_main.js

// ============================================================
// CONSTANTES ET CONFIGURATION
// ============================================================
const API_DOCUMENT_URL = '../../../../model/api/document_dossier_administratif.php';
const API_TYPE_DOCUMENT_URL = '../../../../model/api/type_document_dossier_administratif.php';
const API_ETAT_DOCUMENT_URL = '../../../../model/api/etat_document_dossier_administratif.php';
const API_PROFESSEUR_URL = '../../../../model/api/professeur.php';

let currentDocPage = 1;
const docPerPage = 10;
let docTotalPages = 1;
let docEditMode = false;
let currentDocDetailId = null;
let typeDocumentsMap = {};
let etatDocumentsMap = {};
let professeursMap = {};

// ============================================================
// INITIALISATION
// ============================================================
document.addEventListener('DOMContentLoaded', function() {
    loadProfessors();
    loadTypeDocuments();
    loadEtatDocuments();
    loadDocuments();
    loadStats();
    setupDocumentSearchForm();
});

// ============================================================
// FONCTIONS DE CHARGEMENT DES DONNÉES DE RÉFÉRENCE
// ============================================================
function loadProfessors() {
    fetch(API_PROFESSEUR_URL + '?action=all')
        .then(function(response) { return response.json(); })
        .then(function(result) {
            if (result.success) {
                var professors = result.data;
                professeursMap = {};
                professors.forEach(function(p) {
                    professeursMap[p.id] = p;
                });

                var select = document.getElementById('doc_professeur_id');
                if (select) {
                    select.innerHTML = '<option value="">Sélectionner un professeur</option>';
                    professors.forEach(function(p) {
                        var option = document.createElement('option');
                        option.value = p.id;
                        option.textContent = p.nom + ' ' + p.prenom + ' (' + p.code + ')';
                        select.appendChild(option);
                    });
                }
            }
        })
        .catch(function(error) { console.error('Error loading professors:', error); });
}

function loadTypeDocuments() {
    fetch(API_TYPE_DOCUMENT_URL + '?action=all')
        .then(function(response) { return response.json(); })
        .then(function(result) {
            if (result.success) {
                var types = result.data;
                typeDocumentsMap = {};
                types.forEach(function(t) {
                    typeDocumentsMap[t.id] = t;
                });

                var searchSelect = document.getElementById('searchDocType');
                if (searchSelect) {
                    searchSelect.innerHTML = '<option value="">Tous les types</option>';
                    types.forEach(function(t) {
                        var option = document.createElement('option');
                        option.value = t.id;
                        option.textContent = t.libelle + ' (' + t.code + ')';
                        searchSelect.appendChild(option);
                    });
                }

                var formSelect = document.getElementById('doc_type_document_id');
                if (formSelect) {
                    formSelect.innerHTML = '<option value="">Sélectionner un type</option>';
                    types.forEach(function(t) {
                        var option = document.createElement('option');
                        option.value = t.id;
                        option.textContent = t.libelle + ' (' + t.code + ')';
                        formSelect.appendChild(option);
                    });
                }
            }
        })
        .catch(function(error) { console.error('Error loading type documents:', error); });
}

function loadEtatDocuments() {
    fetch(API_ETAT_DOCUMENT_URL + '?action=all')
        .then(function(response) { return response.json(); })
        .then(function(result) {
            if (result.success) {
                var etats = result.data;
                etatDocumentsMap = {};
                etats.forEach(function(e) {
                    etatDocumentsMap[e.id] = e;
                });

                var searchSelect = document.getElementById('searchDocEtat');
                if (searchSelect) {
                    searchSelect.innerHTML = '<option value="">Tous les états</option>';
                    etats.forEach(function(e) {
                        var option = document.createElement('option');
                        option.value = e.id;
                        option.textContent = e.libelle + ' (' + e.code + ')';
                        searchSelect.appendChild(option);
                    });
                }

                var formSelect = document.getElementById('doc_etat_document_id');
                if (formSelect) {
                    formSelect.innerHTML = '<option value="">Sélectionner un état</option>';
                    etats.forEach(function(e) {
                        var option = document.createElement('option');
                        option.value = e.id;
                        option.textContent = e.libelle + ' (' + e.code + ')';
                        formSelect.appendChild(option);
                    });
                }
            }
        })
        .catch(function(error) { console.error('Error loading etat documents:', error); });
}

// ============================================================
// STATISTIQUES
// ============================================================
function loadStats() {
    fetch(API_DOCUMENT_URL + '?action=stats')
        .then(function(response) { return response.json(); })
        .then(function(result) {
            if (result.success) {
                document.getElementById('statTotalDocuments').textContent = result.data.total || 0;
            }
        })
        .catch(function(error) { console.error('Error loading document stats:', error); });

    fetch(API_TYPE_DOCUMENT_URL + '?action=stats')
        .then(function(response) { return response.json(); })
        .then(function(result) {
            if (result.success) {
                document.getElementById('statTotalTypes').textContent = result.data.total || 0;
            }
        })
        .catch(function(error) { console.error('Error loading type stats:', error); });

    fetch(API_ETAT_DOCUMENT_URL + '?action=stats')
        .then(function(response) { return response.json(); })
        .then(function(result) {
            if (result.success) {
                document.getElementById('statTotalEtats').textContent = result.data.total || 0;
            }
        })
        .catch(function(error) { console.error('Error loading etat stats:', error); });
}

// ============================================================
// RECHERCHE
// ============================================================
function setupDocumentSearchForm() {
    var form = document.getElementById('searchDocumentForm');
    if (form) {
        form.addEventListener('submit', function(e) {
            e.preventDefault();
            currentDocPage = 1;
            loadDocuments();
        });
    }
}

function resetDocumentSearch() {
    var form = document.getElementById('searchDocumentForm');
    if (form) form.reset();

    var typeSelect = document.getElementById('searchDocType');
    if (typeSelect) typeSelect.value = '';

    var etatSelect = document.getElementById('searchDocEtat');
    if (etatSelect) etatSelect.value = '';

    currentDocPage = 1;
    loadDocuments();
}

// ============================================================
// CHARGEMENT DES DOCUMENTS
// ============================================================
function loadDocuments() {
    showLoading(true);

    var searchData = {
        id: document.getElementById('searchDocId')?.value || '',
        libelle: document.getElementById('searchDocLibelle')?.value || '',
        code: document.getElementById('searchDocCode')?.value || '',
        professeur_id: document.getElementById('searchDocProfesseur')?.value || '',
        document_date_dossier: document.getElementById('searchDocDateDossier')?.value || '',
        type_document_id: document.getElementById('searchDocType')?.value || '',
        etat_document_id: document.getElementById('searchDocEtat')?.value || '',
        description: document.getElementById('searchDocDescription')?.value || '',
        page: currentDocPage,
        per_page: docPerPage
    };

    var params = new URLSearchParams(searchData);

    fetch(API_DOCUMENT_URL + '?action=search&' + params.toString())
        .then(function(response) { return response.json(); })
        .then(function(result) {
            showLoading(false);
            if (result.success) {
                renderDocumentTable(result.data.data);
                renderDocumentPagination(result.data);
            } else {
                showToast('Erreur: ' + result.message, 'error');
            }
        })
        .catch(function(error) {
            showLoading(false);
            showToast('Erreur de connexion au serveur', 'error');
            console.error('Error:', error);
        });
}

// ============================================================
// AFFICHAGE DU TABLEAU
// ============================================================
function renderDocumentTable(documents) {
    var tbody = document.getElementById('documentTableBody');

    if (!documents || documents.length === 0) {
        tbody.innerHTML =
            '<tr>' +
            '<td colspan="9" style="text-align: center; padding: 40px; color: #666;">' +
            '<p style="font-size: 18px;">📭 Aucun document trouvé</p>' +
            '<p style="font-size: 14px; margin-top: 5px;">Essayez de modifier vos critères de recherche</p>' +
            '</td>' +
            '</tr>';
        return;
    }

    var html = '';
    documents.forEach(function(doc) {
        var typeLibelle = typeDocumentsMap[doc.type_document_dossier_administratif_id]?.libelle ||
            doc.type_document_libelle || '-';
        var etatLibelle = etatDocumentsMap[doc.etat_document_dossier_administratif_id]?.libelle ||
            doc.etat_document_libelle || '-';
        var professeurNom = professeursMap[doc.professeur_id] ?
            professeursMap[doc.professeur_id].nom + ' ' + professeursMap[doc.professeur_id].prenom :
            (doc.professeur_nom ? doc.professeur_nom + ' ' + doc.professeur_prenom : '-');

        var etatBadgeClass = getEtatBadgeClass(etatLibelle);

        html +=
            '<tr>' +
            '<td>' + doc.id + '</td>' +
            '<td><strong>' + escapeHtml(doc.libelle) + '</strong></td>' +
            '<td><span class="badge badge-info">' + escapeHtml(doc.code) + '</span></td>' +
            '<td><span class="badge badge-primary">' + escapeHtml(typeLibelle) + '</span></td>' +
            '<td><span class="badge ' + etatBadgeClass + '">' + escapeHtml(etatLibelle) + '</span></td>' +
            '<td>' + escapeHtml(professeurNom) + '</td>' +
            '<td>' + (doc.document_date_dossier ? formatDate(doc.document_date_dossier) : '-') + '</td>' +
            '<td>' + formatDate(doc.created_at) + '</td>' +
            '<td>' +
            '<button class="btn btn-info btn-sm" onclick="viewDocumentDetail(' + doc.id + ')" title="Voir les détails">' +
            '<i class="fas fa-eye"></i>' +
            '</button>' +
            '<button class="btn btn-warning btn-sm" onclick="openEditDocumentModal(' + doc.id + ')" title="Modifier">' +
            '<i class="fas fa-edit"></i>' +
            '</button>' +
            '<button class="btn btn-danger btn-sm" onclick="deleteDocument(' + doc.id + ')" title="Supprimer">' +
            '<i class="fas fa-trash"></i>' +
            '</button>' +
            '</td>' +
            '</tr>';
    });

    tbody.innerHTML = html;
}

function getEtatBadgeClass(etatLibelle) {
    var etatMap = {
        'En attente': 'badge-warning',
        'En cours': 'badge-info',
        'Validé': 'badge-success',
        'Rejeté': 'badge-danger',
        'En révision': 'badge-secondary'
    };
    return etatMap[etatLibelle] || 'badge-secondary';
}

// ============================================================
// PAGINATION
// ============================================================
function renderDocumentPagination(data) {
    var total = data.total;
    var page = data.page;
    var pages = data.totalPages;
    docTotalPages = pages;

    var start = (page - 1) * docPerPage + 1;
    var end = Math.min(page * docPerPage, total);
    document.getElementById('documentPaginationInfo').textContent =
        'Affichage de ' + start + ' à ' + end + ' sur ' + total + ' documents';

    var pageNumbers = document.getElementById('documentPageNumbers');
    var html = '';
    for (var i = 1; i <= pages; i++) {
        html += '<button onclick="goToDocumentPage(' + i + ')" ' + (i === page ? 'class="active"' : '') + '>' + i + '</button>';
    }
    pageNumbers.innerHTML = html;

    document.getElementById('docPrevBtn').disabled = page <= 1;
    document.getElementById('docNextBtn').disabled = page >= pages;
}

function changeDocumentPage(direction) {
    if (direction === 'prev' && currentDocPage > 1) {
        currentDocPage--;
    } else if (direction === 'next' && currentDocPage < docTotalPages) {
        currentDocPage++;
    }
    loadDocuments();
}

function goToDocumentPage(page) {
    currentDocPage = page;
    loadDocuments();
}

// ============================================================
// MODAL - CRÉATION / MODIFICATION
// ============================================================
function openCreateDocumentModal() {
    docEditMode = false;
    document.getElementById('documentModalTitle').textContent = 'Nouveau Document';
    document.getElementById('documentForm').reset();
    document.getElementById('documentId').value = '';
    document.getElementById('doc_professeur_id').value = '';
    document.getElementById('doc_type_document_id').value = '';
    document.getElementById('doc_etat_document_id').value = '';
    document.getElementById('documents_paths').value = '';
    document.getElementById('documentModal').classList.add('active');
}

function openEditDocumentModal(id) {
    docEditMode = true;
    document.getElementById('documentModalTitle').textContent = 'Modifier Document';
    document.getElementById('documentId').value = id;

    if (document.getElementById('documentDetailModal')?.classList.contains('active')) {
        closeDocumentDetailModal();
    }

    document.getElementById('documentModal').classList.add('active');
    var fields = ['doc_libelle', 'doc_code', 'doc_description', 'doc_date_dossier', 'documents_paths'];
    fields.forEach(function(f) {
        var el = document.getElementById(f);
        if (el) {
            el.value = 'Chargement...';
            el.disabled = true;
        }
    });
    ['doc_professeur_id', 'doc_type_document_id', 'doc_etat_document_id'].forEach(function(f) {
        var el = document.getElementById(f);
        if (el) el.disabled = true;
    });

    fetch(API_DOCUMENT_URL + '?action=get&id=' + id)
        .then(function(response) { return response.json(); })
        .then(function(result) {
            fields.forEach(function(f) {
                var el = document.getElementById(f);
                if (el) el.disabled = false;
            });
            ['doc_professeur_id', 'doc_type_document_id', 'doc_etat_document_id'].forEach(function(f) {
                var el = document.getElementById(f);
                if (el) el.disabled = false;
            });

            if (result.success) {
                var doc = result.data;
                document.getElementById('doc_libelle').value = doc.libelle;
                document.getElementById('doc_code').value = doc.code;
                document.getElementById('doc_description').value = doc.description || '';
                document.getElementById('doc_professeur_id').value = doc.professeur_id || '';
                document.getElementById('doc_date_dossier').value = doc.document_date_dossier || '';
                document.getElementById('doc_type_document_id').value = doc.type_document_dossier_administratif_id || '';
                document.getElementById('doc_etat_document_id').value = doc.etat_document_dossier_administratif_id || '';
                document.getElementById('documents_paths').value = doc.documents_paths || '';
            } else {
                showToast('Erreur: ' + result.message, 'error');
                closeDocumentModal();
            }
        })
        .catch(function(error) {
            fields.forEach(function(f) {
                var el = document.getElementById(f);
                if (el) el.disabled = false;
            });
            ['doc_professeur_id', 'doc_type_document_id', 'doc_etat_document_id'].forEach(function(f) {
                var el = document.getElementById(f);
                if (el) el.disabled = false;
            });
            showToast('Erreur de connexion au serveur', 'error');
            closeDocumentModal();
            console.error('Error:', error);
        });
}

function closeDocumentModal() {
    document.getElementById('documentModal').classList.remove('active');
}

// ============================================================
// SAUVEGARDE
// ============================================================
function saveDocument() {
    var libelle = document.getElementById('doc_libelle').value.trim();
    var code = document.getElementById('doc_code').value.trim();
    var professeur_id = document.getElementById('doc_professeur_id').value;
    var type_document_id = document.getElementById('doc_type_document_id').value;
    var etat_document_id = document.getElementById('doc_etat_document_id').value;

    if (!libelle) {
        showToast('Veuillez saisir le libellé du document', 'warning');
        document.getElementById('doc_libelle').focus();
        return;
    }

    if (!code) {
        showToast('Veuillez saisir le code du document', 'warning');
        document.getElementById('doc_code').focus();
        return;
    }

    if (!professeur_id) {
        showToast('Veuillez sélectionner un professeur', 'warning');
        document.getElementById('doc_professeur_id').focus();
        return;
    }

    if (!type_document_id) {
        showToast('Veuillez sélectionner un type de document', 'warning');
        document.getElementById('doc_type_document_id').focus();
        return;
    }

    if (!etat_document_id) {
        showToast('Veuillez sélectionner un état', 'warning');
        document.getElementById('doc_etat_document_id').focus();
        return;
    }

    var documentsPaths = document.getElementById('documents_paths').value.trim();
    if (documentsPaths) {
        try {
            var parsed = JSON.parse(documentsPaths);
            if (!Array.isArray(parsed)) {
                showToast('Les chemins de fichiers doivent être un tableau JSON', 'warning');
                return;
            }
        } catch (e) {
            showToast('Format JSON invalide pour les chemins de fichiers (ex: ["fichier1.pdf","fichier2.pdf"])', 'warning');
            return;
        }
    }

    var id = document.getElementById('documentId').value;
    var data = {
        libelle: libelle,
        code: code,
        professeur_id: parseInt(professeur_id),
        type_document_dossier_administratif_id: parseInt(type_document_id),
        etat_document_dossier_administratif_id: parseInt(etat_document_id),
        description: document.getElementById('doc_description').value.trim() || null,
        document_date_dossier: document.getElementById('doc_date_dossier').value || null,
        documents_paths: documentsPaths || null
    };

    var url = id ? API_DOCUMENT_URL + '?action=update&id=' + id : API_DOCUMENT_URL;
    var method = id ? 'PUT' : 'POST';

    var saveBtn = document.querySelector('#documentModal .btn-primary');
    var originalText = saveBtn.innerHTML;
    saveBtn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Enregistrement...';
    saveBtn.disabled = true;

    fetch(url, {
        method: method,
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(data)
    })
        .then(function(response) { return response.json(); })
        .then(function(result) {
            saveBtn.innerHTML = originalText;
            saveBtn.disabled = false;

            if (result.success) {
                showToast(result.message, 'success');
                closeDocumentModal();
                loadDocuments();
                loadStats();
            } else {
                showToast('Erreur: ' + result.message, 'error');
            }
        })
        .catch(function(error) {
            saveBtn.innerHTML = originalText;
            saveBtn.disabled = false;
            showToast('Erreur de connexion au serveur', 'error');
            console.error('Error:', error);
        });
}

// ============================================================
// MODAL - DÉTAIL
// ============================================================
function viewDocumentDetail(id) {
    currentDocDetailId = id;

    document.getElementById('documentDetailModal').classList.add('active');
    document.getElementById('documentDetailContent').innerHTML =
        '<div class="loading active">' +
        '<div class="spinner"></div>' +
        '<p style="margin-top: 10px;">Chargement des détails...</p>' +
        '</div>';
    document.getElementById('editFromDetailDocBtn').style.display = 'none';

    fetch(API_DOCUMENT_URL + '?action=get&id=' + id)
        .then(function(response) { return response.json(); })
        .then(function(result) {
            if (result.success) {
                renderDocumentDetail(result.data);
            } else {
                document.getElementById('documentDetailContent').innerHTML =
                    '<div class="error-state">' +
                    '<i class="fas fa-exclamation-circle"></i>' +
                    '<p>Erreur: ' + result.message + '</p>' +
                    '</div>';
            }
        })
        .catch(function(error) {
            document.getElementById('documentDetailContent').innerHTML =
                '<div class="error-state">' +
                '<i class="fas fa-exclamation-circle"></i>' +
                '<p>Erreur de connexion au serveur</p>' +
                '</div>';
            console.error('Error:', error);
        });
}

function renderDocumentDetail(doc) {
    var typeLibelle = typeDocumentsMap[doc.type_document_dossier_administratif_id]?.libelle ||
        doc.type_document_libelle || '-';
    var etatLibelle = etatDocumentsMap[doc.etat_document_dossier_administratif_id]?.libelle ||
        doc.etat_document_libelle || '-';
    var professeurNom = professeursMap[doc.professeur_id] ?
        professeursMap[doc.professeur_id].nom + ' ' + professeursMap[doc.professeur_id].prenom :
        (doc.professeur_nom ? doc.professeur_nom + ' ' + doc.professeur_prenom : '-');

    var pathsHtml = '-';
    if (doc.documents_paths) {
        try {
            var paths = JSON.parse(doc.documents_paths);
            if (Array.isArray(paths) && paths.length > 0) {
                var pathHtml = '';
                paths.forEach(function(p) {
                    pathHtml += '<span class="badge badge-secondary" style="margin: 2px;">' + escapeHtml(p) + '</span> ';
                });
                pathsHtml = pathHtml;
            }
        } catch (e) {
            pathsHtml = escapeHtml(doc.documents_paths);
        }
    }

    var etatBadgeClass = getEtatBadgeClass(etatLibelle);

    document.getElementById('documentDetailContent').innerHTML =
        '<div class="detail-section">' +
        '<div class="detail-header">' +
        '<div class="detail-avatar">' +
        '<i class="fas fa-file-alt"></i>' +
        '</div>' +
        '<div class="detail-title">' +
        '<h2>' + escapeHtml(doc.libelle) + '</h2>' +
        '<div class="detail-meta">' +
        '<span class="badge badge-info"><i class="fas fa-tag"></i> ' + escapeHtml(doc.code) + '</span>' +
        '<span class="badge badge-primary"><i class="fas fa-folder"></i> ' + escapeHtml(typeLibelle) + '</span>' +
        '<span class="badge ' + etatBadgeClass + '"><i class="fas fa-check-circle"></i> ' + escapeHtml(etatLibelle) + '</span>' +
        '<span class="meta-text"><i class="fas fa-user"></i> ' + escapeHtml(professeurNom) + '</span>' +
        (doc.document_date_dossier ?
            '<span class="meta-text"><i class="fas fa-calendar"></i> Date dossier: ' + formatDate(doc.document_date_dossier) + '</span>' :
            '') +
        '</div>' +
        '</div>' +
        '</div>' +

        '<h3><i class="fas fa-info-circle"></i> Informations du Document</h3>' +
        '<div class="detail-grid">' +
        '<div class="detail-item">' +
        '<span class="label"><i class="fas fa-hashtag"></i> ID</span>' +
        '<span class="value">' + doc.id + '</span>' +
        '</div>' +
        '<div class="detail-item">' +
        '<span class="label"><i class="fas fa-tag"></i> Code</span>' +
        '<span class="value"><span class="badge badge-info">' + escapeHtml(doc.code) + '</span></span>' +
        '</div>' +
        '<div class="detail-item">' +
        '<span class="label"><i class="fas fa-folder"></i> Type</span>' +
        '<span class="value"><span class="badge badge-primary">' + escapeHtml(typeLibelle) + '</span></span>' +
        '</div>' +
        '<div class="detail-item">' +
        '<span class="label"><i class="fas fa-check-circle"></i> État</span>' +
        '<span class="value"><span class="badge ' + etatBadgeClass + '">' + escapeHtml(etatLibelle) + '</span></span>' +
        '</div>' +
        '<div class="detail-item">' +
        '<span class="label"><i class="fas fa-user"></i> Professeur</span>' +
        '<span class="value">' + escapeHtml(professeurNom) + '</span>' +
        '</div>' +
        '<div class="detail-item">' +
        '<span class="label"><i class="fas fa-calendar"></i> Date Dossier</span>' +
        '<span class="value">' + (doc.document_date_dossier ? formatDate(doc.document_date_dossier) : '-') + '</span>' +
        '</div>' +
        '<div class="detail-item full-width">' +
        '<span class="label"><i class="fas fa-align-left"></i> Libellé</span>' +
        '<span class="value">' + escapeHtml(doc.libelle) + '</span>' +
        '</div>' +
        '<div class="detail-item full-width">' +
        '<span class="label"><i class="fas fa-file-alt"></i> Description</span>' +
        '<span class="value' + (!doc.description ? ' empty' : '') + '">' +
        (doc.description ? escapeHtml(doc.description) : 'Aucune description') +
        '</span>' +
        '</div>' +
        '<div class="detail-item full-width">' +
        '<span class="label"><i class="fas fa-files"></i> Documents</span>' +
        '<span class="value">' + pathsHtml + '</span>' +
        '</div>' +
        '</div>' +

        '<div class="detail-metadata">' +
        '<h4><i class="fas fa-clock"></i> Métadonnées</h4>' +
        '<div class="metadata-grid">' +
        '<div class="meta-item">' +
        '<span class="meta-label">Date de création:</span>' +
        '<span class="meta-value">' + formatDate(doc.created_at) + '</span>' +
        '</div>' +
        '<div class="meta-item">' +
        '<span class="meta-label">Dernière mise à jour:</span>' +
        '<span class="meta-value">' + (doc.updated_at ? formatDate(doc.updated_at) : 'Jamais') + '</span>' +
        '</div>' +
        '</div>' +
        '</div>' +
        '</div>';

    document.getElementById('editFromDetailDocBtn').style.display = 'inline-flex';
}

function editFromDocumentDetail() {
    if (currentDocDetailId) {
        closeDocumentDetailModal();
        setTimeout(function() {
            openEditDocumentModal(currentDocDetailId);
        }, 300);
    }
}

function closeDocumentDetailModal() {
    document.getElementById('documentDetailModal').classList.remove('active');
    currentDocDetailId = null;
}

// ============================================================
// SUPPRESSION
// ============================================================
function deleteDocument(id) {
    if (!confirm('Êtes-vous sûr de vouloir supprimer ce document ?\n\nCette action est irréversible.')) return;

    var btn = document.querySelector('button[onclick="deleteDocument(' + id + ')"]');
    if (btn) {
        btn.innerHTML = '<i class="fas fa-spinner fa-spin"></i>';
        btn.disabled = true;
    }

    fetch(API_DOCUMENT_URL + '?action=delete&id=' + id, {
        method: 'DELETE'
    })
        .then(function(response) { return response.json(); })
        .then(function(result) {
            if (btn) {
                btn.innerHTML = '<i class="fas fa-trash"></i>';
                btn.disabled = false;
            }

            if (result.success) {
                showToast(result.message, 'success');
                loadDocuments();
                loadStats();
            } else {
                showToast('Erreur: ' + result.message, 'error');
            }
        })
        .catch(function(error) {
            if (btn) {
                btn.innerHTML = '<i class="fas fa-trash"></i>';
                btn.disabled = false;
            }
            showToast('Erreur de connexion au serveur', 'error');
            console.error('Error:', error);
        });
}

// ============================================================
// EXPORT
// ============================================================
function exportDocuments() {
    window.location.href = API_DOCUMENT_URL + '?action=export';
}

// ============================================================
// FONCTIONS UTILITAIRES
// ============================================================
function showLoading(show) {
    var loading = document.querySelector('#documentTableBody .loading');
    if (loading) {
        if (show) {
            loading.classList.add('active');
        } else {
            loading.classList.remove('active');
        }
    }
}

function showToast(message, type) {
    type = type || 'info';
    var container = document.getElementById('toastContainer');
    if (!container) return;

    var toast = document.createElement('div');
    toast.className = 'toast toast-' + type;
    toast.innerHTML =
        '<span class="toast-icon">' + getToastIcon(type) + '</span>' +
        '<span class="toast-message">' + message + '</span>' +
        '<button class="toast-close" onclick="this.parentElement.remove()">&times;</button>';
    container.appendChild(toast);

    setTimeout(function() {
        if (toast.parentElement) {
            toast.style.opacity = '0';
            toast.style.transform = 'translateX(100%)';
            toast.style.transition = 'all 0.3s ease';
            setTimeout(function() {
                if (toast.parentElement) {
                    toast.remove();
                }
            }, 300);
        }
    }, 4000);
}

function getToastIcon(type) {
    var icons = {
        success: '✅',
        error: '❌',
        warning: '⚠️',
        info: 'ℹ️'
    };
    return icons[type] || 'ℹ️';
}

function formatDate(dateStr) {
    if (!dateStr) return '-';
    var date = new Date(dateStr);
    return date.toLocaleString('fr-FR', {
        day: '2-digit',
        month: '2-digit',
        year: 'numeric',
        hour: '2-digit',
        minute: '2-digit'
    });
}

function escapeHtml(text) {
    if (!text) return '';
    var div = document.createElement('div');
    div.textContent = text;
    return div.innerHTML;
}

// ============================================================
// FERMETURE DES MODALS
// ============================================================
document.querySelectorAll('.modal-overlay').forEach(function(modal) {
    modal.addEventListener('click', function(e) {
        if (e.target === this) {
            if (this.id === 'documentDetailModal') {
                closeDocumentDetailModal();
            } else if (this.id === 'documentModal') {
                closeDocumentModal();
            }
        }
    });
});

document.addEventListener('keydown', function(e) {
    if (e.key === 'Escape') {
        if (document.getElementById('documentDetailModal')?.classList.contains('active')) {
            closeDocumentDetailModal();
        } else if (document.getElementById('documentModal')?.classList.contains('active')) {
            closeDocumentModal();
        }
    }
});