/* =============================================================================
   App multi-vues + routeur hash. En maintenance partielle, seuls #dashboard et
   #booking affichent la <main> (#site-views) ; le reste → MaintenanceShell
   (voir src/maintenance.jsx).

   Pass partout admin : ce fichier est chargé AVANT maintenance.jsx (index.html).
   ============================================================================= */

/* Pass partout — accès intégral sans écran maintenance UNIQUEMENT si l'admin
   s'est authentifié avec succès sur #admin (mot de passe vérifié côté serveur,
   stocké en sessionStorage ms_admin_pw). Plus de ?admin=true ni localStorage. */
(function registerAdminBypass() {
  window.msAdminBypass = function msAdminBypass() {
    try {
      const pw = sessionStorage.getItem('ms_admin_pw');
      return Boolean(pw && String(pw).length > 0);
    } catch (e) {
      return false;
    }
  };
  try { localStorage.removeItem('admin_access'); } catch (e) {}
})();

/* ===== App entry — mount each view into its container ===== */

function mount(id, Component) {
  const el = document.getElementById(id);
  if (el) ReactDOM.createRoot(el).render(<Component />);
}

mount('view-home',      window.HomePage);
mount('view-services',  window.ServicesPage);
mount('view-booking',   window.BookingPage);
mount('view-dashboard', window.DashboardPage);
mount('view-faq',       window.FAQPage);
mount('view-privacy',   window.PrivacyPage);
mount('view-admin',     window.AdminPage);

/* ===== Routeur hash — #dashboard → vue [data-view="dashboard"] (DashboardPage ci-dessus) ===== */
(function mountHashRouter() {
  const routes = ['home', 'services', 'booking', 'dashboard', 'faq', 'privacy', 'admin'];
  function activate() {
    const raw = (location.hash || '#home').replace(/^#/, '');
    const path = (raw.split('?')[0] || 'home').toLowerCase();
    const target = routes.indexOf(path) >= 0 ? path : 'home';
    document.querySelectorAll('[data-view]').forEach((el) => {
      el.classList.toggle('is-active', el.dataset.view === target);
    });
    window.scrollTo({ top: 0, behavior: 'auto' });
  }
  window.addEventListener('hashchange', activate);
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', activate);
  } else {
    activate();
  }
})();

/* Bouton flottant « Réserver une visite » retiré — l’ancien #sticky-cta est nettoyé
   au cas où il aurait été persistant via cache navigateur. */
(function removeLegacyStickyCTA() {
  const cta = document.getElementById('sticky-cta');
  if (cta && cta.parentNode) cta.parentNode.removeChild(cta);
})();
