// SGL · Cliente de e-mail (frontend) — FASE 0 · SPIKE
// Chama a Edge Function `email-sync`, que conecta na caixa IMAP no servidor.
// As credenciais IMAP NUNCA trafegam pelo navegador — ficam só nos Secrets do Supabase.

async function callEmailSync(action, payload = {}) {
  if (!window.supa) {
    return { ok: false, error: 'Supabase não inicializado.' };
  }
  const { data: { session } } = await window.supa.auth.getSession();
  if (!session) {
    return { ok: false, error: 'Você precisa estar logado para usar este recurso.' };
  }
  try {
    const { data, error } = await window.supa.functions.invoke('email-sync', {
      body: { action, ...payload },
    });
    if (error) {
      let serverMsg = null;
      try {
        if (error.context && typeof error.context.json === 'function') {
          const body = await error.context.json();
          serverMsg = body && (body.error || body.detalhe);
        }
      } catch {
        /* corpo não-JSON */
      }
      if (error.name === 'FunctionsFetchError') {
        return { ok: false, error: 'Não foi possível contatar o servidor. A função "email-sync" foi publicada?' };
      }
      return { ok: false, error: serverMsg || error.message || 'Falha ao chamar email-sync.' };
    }
    return data || { ok: false, error: 'Resposta vazia do servidor.' };
  } catch (e) {
    return { ok: false, error: (e && e.message) || 'Erro inesperado ao contatar a caixa.' };
  }
}

/** Testa a conexão IMAP e lista os últimos e-mails (assunto/remetente/data). */
async function testImap() {
  return callEmailSync('test');
}

/** Sincroniza: captura e-mails novos da caixa, classifica por IA e grava. */
async function syncEmails() {
  return callEmailSync('sync');
}

window.callEmailSync = callEmailSync;
window.testImap = testImap;
window.syncEmails = syncEmails;
