/* ===========================================================
   PIPOQUE — camada de API (substitui o localStorage do servidor)
   =========================================================== */
const API_BASE = '/api';
const TOKEN_KEY = 'pipoque_admin_token';

const getToken = () => { try { return localStorage.getItem(TOKEN_KEY) || ''; } catch (e) { return ''; } };
const setToken = (t) => { try { t ? localStorage.setItem(TOKEN_KEY, t) : localStorage.removeItem(TOKEN_KEY); } catch (e) {} };

/* Wrapper sobre fetch. Lança Error (com .status) em respostas != 2xx. */
async function api(path, { method = 'GET', body, auth = false } = {}) {
  const headers = {};
  if (body !== undefined) headers['Content-Type'] = 'application/json';
  if (auth) headers['Authorization'] = 'Bearer ' + getToken();

  let res;
  try {
    res = await fetch(API_BASE + path, {
      method,
      headers,
      body: body !== undefined ? JSON.stringify(body) : undefined,
    });
  } catch (e) {
    const err = new Error('falha de conexão com o servidor');
    err.status = 0;
    throw err;
  }

  if (res.status === 401) {
    setToken(''); // token inválido/expirado
    try { localStorage.removeItem('pipoque_admin_session'); } catch (e) {}
    const err = new Error('não autorizado');
    err.status = 401;
    throw err;
  }

  let data = null;
  try { data = await res.json(); } catch (e) {}

  if (!res.ok) {
    const err = new Error((data && data.error) || ('erro ' + res.status));
    err.status = res.status;
    throw err;
  }
  return data;
}

window.api = api;
window.apiToken = { get: getToken, set: setToken };
