/* global window */
// Kaleidos Pay — API helpers (mesmo origin)
// Auth via Neon Auth (Better Auth backend) — endpoints em /api/auth/*

window.SEQ_API = (function () {
  const J = (path, opts) =>
    fetch(path, { credentials: "include", ...opts })
      .then((r) => {
        if (!r.ok) throw new Error(`${path} → ${r.status}`);
        return r.json();
      });

  const POST = (path, data) =>
    J(path, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(data || {}),
    });

  return {
    // ─── Auth (Neon Auth · Better Auth) ───
    me: async () => {
      try {
        const session = await J("/api/auth/get-session");
        return {
          authenticated: !!session?.session,
          user: session?.user ?? null,
        };
      } catch {
        return { authenticated: false, user: null };
      }
    },
    signInEmail: (email, password) => POST("/api/auth/sign-in/email", { email, password }),
    signInGoogle: (callbackURL) =>
      POST("/api/auth/sign-in/social", {
        provider: "google",
        // Better Auth valida callbackURL contra trustedOrigins; relativa "/" é seempre aceita
        callbackURL: callbackURL || "/",
      }),
    signUpEmail: (email, password, name) =>
      POST("/api/auth/sign-up/email", { email, password, name }),
    signOut: () => POST("/api/auth/sign-out"),

    // Aliases legados pra compatibilidade com código existente
    login: (email, password) => POST("/api/auth/sign-in/email", { email, password }),
    logout: () => POST("/api/auth/sign-out"),

    // ─── Stats / Dashboard ───
    stats: () => J("/api/stats"),

    // ─── Clients ───
    listClients: () => J("/api/clients"),
    createClient: (data) => POST("/api/clients", data),
    getClient: (id) => J(`/api/clients/${id}`),
    updateClient: (id, data) =>
      J(`/api/clients/${id}`, {
        method: "PATCH",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify(data),
      }),
    listClientInvestments: (id) => J(`/api/clients/${id}/investments`),
    createClientInvestment: (id, data) => POST(`/api/clients/${id}/investments`, data),
    deleteClientInvestment: (id, investmentId) =>
      J(`/api/clients/${id}/investments/${investmentId}`, { method: "DELETE" }),

    // ─── Invoices ───
    listInvoices: () => J("/api/invoices"),
    createInvoice: (data) => POST("/api/invoices", data),
    getInvoice: (id) => J(`/api/invoices/${id}`),

    // ─── Proposals ───
    listProposals: () => J("/api/proposals"),
    getProposal: (id) => J(`/api/proposals/${id}`),
    listProposalViews: (id) => J(`/api/proposals/${id}/views`),
    createProposal: (data) => POST("/api/proposals", data),
    sendProposal: (id) => POST(`/api/proposals/${id}/send`),

    // ─── Products ───
    listProducts: () => J("/api/products"),
    createProduct: (data) => POST("/api/products", data),

    // ─── Subscriptions ───
    listSubscriptions: () => J("/api/subscribers"),

    // ─── Affiliates ───
    listAffiliates: () => J("/api/affiliates"),
    createAffiliate: (data) => POST("/api/affiliates", data),

    // ─── Balance ───
    getBalance: () => J("/api/balance"),
    requestPayout: (data) => POST("/api/balance", data),

    // ─── Integrations ───
    listIntegrations: () => J("/api/integrations"),
    updateIntegration: (provider, data) =>
      J("/api/integrations", {
        method: "PATCH",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ provider, ...data }),
      }),

    // ─── Checkouts ───
    listCheckouts: () => J("/api/checkouts"),
    createCheckout: (data) => POST("/api/checkouts", data),
  };
})();
