/* ════════════════════════════════════════════════════════════════════
   app.js — amorçage de l'application : vérification des bibliothèques
   embarquées, navigation entre les outils, garde avant fermeture.
   ════════════════════════════════════════════════════════════════════ */
window.App = (() => {
  'use strict';

  // Chaque onglet s'enregistre avec une fonction indiquant s'il contient
  // du travail non exporté (garde beforeunload).
  const tabs = new Map(); // id → hasData()

  function registerTab(id, hasData) {
    tabs.set(id, hasData);
  }

  function checkVendors() {
    const missing = [];
    if (!window.pdfjsLib) missing.push('pdf.min.js');
    if (!window.pdfjsWorker) missing.push('pdf.worker.min.js');
    if (!window.PDFLib) missing.push('pdf-lib.min.js');
    if (!window.Sortable) missing.push('sortable.min.js');
    if (!window.JSZip) missing.push('jszip.min.js');
    if (missing.length) {
      const banner = Utils.byId('fatal');
      banner.textContent = 'Bibliothèques introuvables dans le dossier vendor/ : '
        + missing.join(', ')
        + '. Conservez le dossier complet de l\u2019application, tel que téléchargé.';
      banner.hidden = false;
    }
    return missing.length === 0;
  }

  function initNav() {
    const items = [...document.querySelectorAll('.nav-item')];
    items.forEach((btn) => {
      btn.addEventListener('click', () => {
        items.forEach((b) => b.removeAttribute('aria-current'));
        btn.setAttribute('aria-current', 'page');
        document.querySelectorAll('.tool').forEach((s) => { s.hidden = true; });
        Utils.byId(`tool-${btn.dataset.tool}`).hidden = false;
      });
    });
  }

  function init() {
    PdfEngine.init();
    checkVendors();
    initNav();

    // Un dépôt de fichier hors d'une zone prévue ne doit pas remplacer la page.
    ['dragover', 'drop'].forEach((ev) =>
      document.addEventListener(ev, (e) => e.preventDefault()));

    // Prévenir avant de fermer si un onglet contient du travail en cours.
    window.addEventListener('beforeunload', (e) => {
      for (const hasData of tabs.values()) {
        if (hasData()) {
          e.preventDefault();
          e.returnValue = '';
          return;
        }
      }
    });
  }

  document.addEventListener('DOMContentLoaded', init);

  return { registerTab };
})();
