import { apiFetch, apiBaseUrl, fetchAutenticado } from "./client.js"; import { baixarBlob } from "../utils/download.js"; export function sincronizarAtendimentos(params = {}) { return apiFetch("/api/atendimentos/sync", { method: "POST", body: params }); } export function sincronizarTodosAtendimentos(params = {}) { return apiFetch("/api/atendimentos/sync-all", { method: "POST", body: params }); } export function obterAtendimento(id) { return apiFetch(`/api/atendimentos/${id}`); } export function sincronizarAtendimento(id) { return apiFetch(`/api/atendimentos/${id}/sync`, { method: "POST", body: {} }); } export function avaliarAtendimentosPendentes(params = {}) { return apiFetch("/api/atendimentos/avaliar", { method: "POST", body: params }); } export function avaliarAtendimento(id) { return apiFetch(`/api/atendimentos/${id}/avaliar`, { method: "POST", body: {} }); } export function listarAvaliacoes({ page = 1, pageSize = 20, setor, resolvido, sentimento, statusCancelamento, scoreMax, busca, ordenacao, dataInicio, dataFim } = {}) { const query = new URLSearchParams({ page: String(page), pageSize: String(pageSize) }); if (setor) query.set("setor", setor); if (resolvido) query.set("resolvido", resolvido); if (sentimento) query.set("sentimento", sentimento); if (statusCancelamento) query.set("statusCancelamento", statusCancelamento); if (scoreMax !== undefined) query.set("scoreMax", String(scoreMax)); if (busca) query.set("busca", busca); if (ordenacao === "asc") query.set("ordenacao", ordenacao); if (dataInicio) query.set("dataInicio", dataInicio); if (dataFim) query.set("dataFim", dataFim); return apiFetch(`/api/atendimentos/avaliacoes?${query.toString()}`); } export function estatisticasAvaliacoes({ setor, resolvido, sentimento, statusCancelamento, busca, dataInicio, dataFim } = {}) { const query = new URLSearchParams(); if (setor) query.set("setor", setor); if (resolvido) query.set("resolvido", resolvido); if (sentimento) query.set("sentimento", sentimento); if (statusCancelamento) query.set("statusCancelamento", statusCancelamento); if (busca) query.set("busca", busca); if (dataInicio) query.set("dataInicio", dataInicio); if (dataFim) query.set("dataFim", dataFim); const qs = query.toString(); return apiFetch(`/api/atendimentos/avaliacoes/estatisticas${qs ? `?${qs}` : ""}`); } export function listarSetoresAvaliacoes() { return apiFetch("/api/atendimentos/avaliacoes/setores"); } export function listarGoldenSet({ status, setor } = {}) { const query = new URLSearchParams(); if (status) query.set("status", status); if (setor) query.set("setor", setor); const qs = query.toString(); return apiFetch(`/api/atendimentos/golden-set${qs ? `?${qs}` : ""}`); } export function salvarGoldenLabel(id, dados) { return apiFetch(`/api/atendimentos/${id}/golden-label`, { method: "PATCH", body: dados }); } export function aceitarGoldenLabelComoIa(id) { return apiFetch(`/api/atendimentos/${id}/golden-label/aceitar`, { method: "POST" }); } export async function baixarRelatorioNaoResolvidos({ setor, sentimento, busca, ordenacao, dataInicio, dataFim } = {}) { const query = new URLSearchParams(); if (setor) query.set("setor", setor); if (sentimento) query.set("sentimento", sentimento); if (busca) query.set("busca", busca); if (ordenacao === "asc") query.set("ordenacao", ordenacao); if (dataInicio) query.set("dataInicio", dataInicio); if (dataFim) query.set("dataFim", dataFim); const reqUrl = `${apiBaseUrl}/api/atendimentos/avaliacoes/relatorio?${query.toString()}`; const res = await fetchAutenticado(reqUrl); if (!res.ok) { const text = await res.text().catch(() => ""); let payload = null; try { payload = JSON.parse(text); } catch {} if (payload?.error === "relatorio_muito_grande") { throw new Error(`Muitos atendimentos para gerar o relatório (limite: ${payload.limite}). ${payload.dica ?? "Estreite o período ou os filtros."}`); } throw new Error(payload?.error || text || `http_error:${res.status}`); } baixarBlob(await res.blob(), `atendimentos-nao-resolvidos-${new Date().toISOString().slice(0, 10)}.pdf`); }