/* ============================================================================
 * FLUXO ZAP · Endpoints
 * ----------------------------------------------------------------------------
 * Todos os endpoints do backend tipados como funções. Esta é a ÚNICA fonte
 * de verdade sobre as URLs/contratos. Se você renomear uma rota no servidor,
 * mude AQUI e nada mais.
 *
 * Veja BACKEND-CONTRACTS.md para o JSON schema de cada response.
 * ========================================================================= */

const api = () => window.FluxoApi;

const Endpoints = {

  // ── AUTH ────────────────────────────────────────────────────────────────
  auth: {
    login:        (email, password) => api().post('/api/auth/login', { email, password }),
    logout:       () => api().post('/api/auth/logout'),
    me:           () => api().get('/api/auth/me'),
    refreshToken: () => api().post('/api/auth/refresh'),
  },

  // ── LEADS / CONTATOS ────────────────────────────────────────────────────
  leads: {
    list:         (filters = {}) => api().get('/api/leads?' + new URLSearchParams(filters).toString()),
    get:          (id) => api().get(`/api/leads/${id}`),
    create:       (data) => api().post('/api/leads', data),
    update:       (id, patch) => api().patch(`/api/leads/${id}`, patch),
    delete:       (id) => api().del(`/api/leads/${id}`),

    // Mover de etapa do pipeline (kanban drag)
    moveStage:    (id, stage) => api().patch(`/api/leads/${id}/stage`, { stage }),

    // Tags
    addTag:       (id, tag) => api().post(`/api/leads/${id}/tags`, { tag }),
    removeTag:    (id, tag) => api().del(`/api/leads/${id}/tags/${encodeURIComponent(tag)}`),

    // Notas internas
    listNotes:    (id) => api().get(`/api/leads/${id}/notes`),
    addNote:      (id, body) => api().post(`/api/leads/${id}/notes`, { body }),

    // Linha do tempo / atividades
    timeline:     (id) => api().get(`/api/leads/${id}/timeline`),

    // Insights da IA pra este lead
    aiInsights:   (id) => api().get(`/api/leads/${id}/ai-insights`),
    analyze:      (id) => api().post(`/api/leads/${id}/analyze`),
  },

  // ── CONVERSAS WHATSAPP ──────────────────────────────────────────────────
  conversations: {
    list:         (filters = {}) => api().get('/api/conversations?' + new URLSearchParams(filters).toString()),
    get:          (leadId) => api().get(`/api/conversations/${leadId}`),
    messages:     (leadId, before) => api().get(`/api/conversations/${leadId}/messages${before ? '?before=' + before : ''}`),
    send:         (leadId, payload) => api().post(`/api/conversations/${leadId}/messages`, payload),
    markRead:     (leadId) => api().post(`/api/conversations/${leadId}/read`),

    // Take over: humano assume da IA (ou devolve pra IA)
    takeover:     (leadId) => api().post(`/api/conversations/${leadId}/takeover`),
    releaseToAi:  (leadId) => api().post(`/api/conversations/${leadId}/release`),

    // Resumo automático da conversa
    summarize:    (leadId) => api().post(`/api/conversations/${leadId}/summarize`),
  },

  // ── RESPOSTAS RÁPIDAS ───────────────────────────────────────────────────
  quickReplies: {
    list:         () => api().get('/api/quick-replies'),
    upload:       (id, file) => {
      const formData = new FormData();
      formData.append('file', file);
      const token = typeof window.FluxoConfig.AUTH_TOKEN === 'function' ? window.FluxoConfig.AUTH_TOKEN() : window.FluxoConfig.AUTH_TOKEN;
      return fetch(window.FluxoConfig.API_BASE_URL + `/api/quick-replies/${id}/upload`, {
        method: 'POST',
        headers: {
          'Authorization': 'Bearer ' + token
        },
        body: formData
      }).then(r => r.json());
    }
  },

  // ── IA / ASSISTENTE ─────────────────────────────────────────────────────
  ai: {
    config:       () => api().get('/api/ai/config'),
    updateConfig: (patch) => api().patch('/api/ai/config', patch),

    // Pede sugestão de resposta pra uma conversa
    suggest:      (leadId, context) => api().post('/api/ai/suggest', { leadId, context }),

    // Frases-gatilho (triggers)
    listTriggers: () => api().get('/api/ai/triggers'),
    addTrigger:   (trigger) => api().post('/api/ai/triggers', trigger),
    saveTrigger:  (trigger) => api().post('/api/ai/triggers', trigger),
    deleteTrigger:(id) => api().del(`/api/ai/triggers/${id}`),

    // Métricas da IA
    performance:  (range = '7d') => api().get(`/api/ai/performance?range=${range}`),

    // Teste no simulador
    simulate:     (messages) => api().post('/api/ai/simulate', { messages }),
  },

  // ── DASHBOARD ───────────────────────────────────────────────────────────
  dashboard: {
    kpis:         (range = '7d') => api().get(`/api/dashboard/kpis?range=${range}`),
    funnel:       (range = '7d') => api().get(`/api/dashboard/funnel?range=${range}`),
    heatmap:      (range = '30d') => api().get(`/api/dashboard/heatmap?range=${range}`),
    aiLive:       () => api().get('/api/dashboard/ai-live'),
  },

  // ── RADAR DE PROSPECÇÃO ─────────────────────────────────────────────────
  radar: {
    prospects:    (filters = {}) => api().get('/api/radar/prospects?' + new URLSearchParams(filters).toString()),
    criteria:     () => api().get('/api/radar/criteria'),
    updateCriteria: (criteria) => api().put('/api/radar/criteria', criteria),
    approach:     (prospectId) => api().post(`/api/radar/prospects/${prospectId}/approach`),
    skip:         (prospectId) => api().post(`/api/radar/prospects/${prospectId}/skip`),
    stats:        () => api().get('/api/radar/stats'),
  },

  // ── BASE DE CONHECIMENTO ────────────────────────────────────────────────
  knowledge: {
    sources:      () => api().get('/api/knowledge/sources'),
    addSource:    (source) => api().post('/api/knowledge/sources', source),
    removeSource: (id) => api().del(`/api/knowledge/sources/${id}`),
    resyncSource: (id) => api().post(`/api/knowledge/sources/${id}/sync`),
    gaps:         () => api().get('/api/knowledge/gaps'),
    teach:        (gapId, answer) => api().post(`/api/knowledge/gaps/${gapId}/teach`, { answer }),
    suggested:    () => api().get('/api/knowledge/suggested-trainings'),
    coverage:     () => api().get('/api/knowledge/coverage'),
  },

  // ── PIPELINE / KANBAN ───────────────────────────────────────────────────
  pipeline: {
    stages:       () => api().get('/api/pipeline/stages'),
    saveStages:   (stages) => api().put('/api/pipeline/stages', { stages }),
  },

  // ── NEGÓCIOS (DEALS) ────────────────────────────────────────────────────
  deals: {
    list:         (leadId) => api().get(`/api/deals?leadId=${leadId}`),
    create:       (deal) => api().post('/api/deals', deal),
    update:       (id, patch) => api().patch(`/api/deals/${id}`, patch),
    close:        (id, outcome) => api().post(`/api/deals/${id}/close`, { outcome }),
  },

  // ── AGENDAMENTOS (APPOINTMENTS) ─────────────────────────────────────────
  appointments: {
    list:         () => api().get('/api/appointments'),
    create:       (data) => api().post('/api/appointments', data),
    delete:       (id) => api().del(`/api/appointments/${id}`),
  },

  // ── EQUIPE (TEAM) ───────────────────────────────────────────────────────
  team: {
    list:         () => api().get('/api/team'),
    invite:       (email, role) => api().post('/api/team/invite', { email, role }),
    updateRole:   (userId, role) => api().patch(`/api/team/${userId}`, { role }),
    remove:       (userId) => api().del(`/api/team/${userId}`),
  },

  // ── INTEGRAÇÕES ─────────────────────────────────────────────────────────
  integrations: {
    list:         () => api().get('/api/integrations'),
    connect:      (id, credentials) => api().post(`/api/integrations/${id}/connect`, credentials),
    disconnect:   (id) => api().post(`/api/integrations/${id}/disconnect`),
    test:         (id) => api().post(`/api/integrations/${id}/test`),
  },

  // ── API KEYS / WEBHOOKS ─────────────────────────────────────────────────
  apiKeys: {
    list:         () => api().get('/api/api-keys'),
    create:       (name) => api().post('/api/api-keys', { name }),
    revoke:       (id) => api().del(`/api/api-keys/${id}`),
  },
  webhooks: {
    list:         () => api().get('/api/webhooks'),
    create:       (url, events) => api().post('/api/webhooks', { url, events }),
    delete:       (id) => api().del(`/api/webhooks/${id}`),
  },
};

window.FluxoEndpoints = Endpoints;
