// ESTÚDIO — Camada de nuvem (Supabase). Exporta window.ESTUDIO_CLOUD.
// Sincroniza o estado (produção, pautas, hábitos, clientes, CRM…) com uma
// tabela do Supabase para persistir de verdade e sincronizar entre aparelhos.
// Cada "canal" (ex: "lorenna-estudio", "lorenna-logue") é uma linha da tabela.
// Sem configuração (window.ESTUDIO_CONFIG ausente), fica inerte: tudo continua
// salvo no navegador (localStorage) e nada quebra.
(function () {
  const cfg = window.ESTUDIO_CONFIG || {};
  const URL = (cfg.supabaseUrl || "").replace(/\/+$/, "");
  const KEY = cfg.supabaseKey || "";
  const TABLE = cfg.table || "mc_estado"; // reaproveita a tabela já existente
  const enabled = !!(URL && KEY);

  function endpoint(q) { return URL + "/rest/v1/" + TABLE + (q || ""); }
  function headers(extra) {
    return Object.assign({ apikey: KEY, Authorization: "Bearer " + KEY, "Content-Type": "application/json" }, extra || {});
  }

  // Busca o estado salvo na nuvem para um canal (ou null).
  async function pull(recordId) {
    if (!enabled) return null;
    try {
      const r = await fetch(endpoint("?id=eq." + encodeURIComponent(recordId) + "&select=dados"), { headers: headers() });
      if (!r.ok) throw new Error("HTTP " + r.status);
      const rows = await r.json();
      return rows && rows[0] ? rows[0].dados : null;
    } catch (e) { return null; }
  }

  // Salva o estado na nuvem (upsert), com debounce por canal.
  const timers = {}, pending = {};
  function push(recordId, state) {
    if (!enabled) return;
    pending[recordId] = state;
    clearTimeout(timers[recordId]);
    timers[recordId] = setTimeout(() => flush(recordId), 700);
  }
  async function flush(recordId) {
    if (!enabled || !pending[recordId]) return;
    const body = JSON.stringify([{ id: recordId, dados: pending[recordId], atualizado_em: new Date().toISOString() }]);
    pending[recordId] = null;
    try {
      await fetch(endpoint("?on_conflict=id"), {
        method: "POST",
        headers: headers({ Prefer: "resolution=merge-duplicates,return=minimal" }),
        body,
      });
    } catch (e) {}
  }

  window.ESTUDIO_CLOUD = { enabled: () => enabled, pull, push };
})();
