// js/app.js // Point d'entree principal - Routeur et Initialisation de l'application import { isConfigured, saveConfig, initSupabase } from './supabase.js'; import { isLoggedIn, getCurrentUser, logout, renderLogin } from './auth.js'; import { renderAtelier } from './atelier.js'; import { renderMagasin } from './magasin.js'; import { renderProprietaire } from './proprietaire.js'; // Attendre que le SDK Supabase soit disponible (avec retry - Safari iOS fix) function waitForSupabaseSDK(maxWaitMs) { return new Promise((resolve, reject) => { if (typeof window.supabase !== 'undefined') { return resolve(); } const start = Date.now(); const interval = setInterval(() => { if (typeof window.supabase !== 'undefined') { clearInterval(interval); return resolve(); } if (Date.now() - start > maxWaitMs) { clearInterval(interval); // Try loading dynamically as fallback const script = document.createElement('script'); script.src = 'https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2'; script.onload = () => resolve(); script.onerror = () => reject(new Error("Impossible de charger le SDK Supabase.")); document.head.appendChild(script); } }, 50); }); } // demarrage de l'application async function boot() { const loadingScreen = document.getElementById('loading-screen'); const setupModal = document.getElementById('setup-modal'); const appContainer = document.getElementById('app'); try { // Attendre Supabase SDK (max 8 secondes, retry toutes les 50ms - fix Safari) await waitForSupabaseSDK(8000); // Si la DB n'est pas configuree -> Afficher le modal de configuration if (!isConfigured()) { loadingScreen.classList.add('hidden'); setupModal.classList.remove('hidden'); setupModal.classList.add('flex'); document.getElementById('setup-form').addEventListener('submit', (e) => { e.preventDefault(); const url = document.getElementById('setup-url').value.trim(); const key = document.getElementById('setup-key').value.trim(); if (saveConfig(url, key)) { setupModal.classList.add('hidden'); loadingScreen.classList.remove('hidden'); boot(); } else { alert("Veuillez renseigner une URL et une cle Supabase valides."); } }); return; } // Initialiser le client Supabase const db = initSupabase(); if (!db) { throw new Error("Impossible d'initialiser Supabase. Verifiez vos cles de connexion."); } // Masquer l'ecran de chargement immediatement (ne pas attendre la DB) loadingScreen.classList.add('hidden'); // Verifier si un utilisateur est deja connecte if (!isLoggedIn()) { renderAppView(appContainer, null, db); } else { const user = getCurrentUser(); renderAppView(appContainer, user, db); } } catch (error) { console.error("Erreur de demarrage :", error); if (loadingScreen) { loadingScreen.innerHTML = `
${error.message}
Ce compte ne dispose d'aucun acces valide. Contactez le proprietaire.