/* ClientBase — Supabase client + local-first sync layer (étape 1/6)
   Configuration fournie par window.SUPABASE_CONFIG dans index.html. */

(function initSupabase() {
  const cfg = window.SUPABASE_CONFIG || {};
  if (!cfg.url || !cfg.anonKey) {
    console.warn("[cb-supabase] pas de SUPABASE_CONFIG — mode 100% localStorage");
    window.cbSupabase = null;
    return;
  }
  if (typeof window.supabase === "undefined" || !window.supabase.createClient) {
    console.warn("[cb-supabase] @supabase/supabase-js pas chargé — mode 100% localStorage");
    window.cbSupabase = null;
    return;
  }
  window.cbSupabase = window.supabase.createClient(cfg.url, cfg.anonKey, {
    auth: {
      persistSession: true,
      autoRefreshToken: true,
      detectSessionInUrl: true,
      flowType: "pkce",
      storageKey: "cb_sb_auth_v1",
    },
  });
  console.info("[cb-supabase] client prêt →", cfg.url);
})();

/* Statut de connexion pour la future couche data.
   - null    : pas encore testé
   - true    : on a une session Supabase valide → on synchro
   - false   : offline ou pas de compte cloud → on reste 100% localStorage */
window.cbSync = {
  online: null,
  listeners: new Set(),
  set(v) {
    if (this.online === v) return;
    this.online = v;
    this.listeners.forEach(fn => { try { fn(v); } catch (e) { console.error(e); } });
  },
  onChange(fn) { this.listeners.add(fn); return () => this.listeners.delete(fn); },
};

/* Suit l'état de la session Supabase. */
if (window.cbSupabase) {
  window.cbSupabase.auth.getSession().then(({ data }) => {
    window.cbSync.set(!!data.session);
  });
  window.cbSupabase.auth.onAuthStateChange((_event, session) => {
    window.cbSync.set(!!session);
  });
}
