import type { Equipe, Processo, StatusFiltro } from "./types"; const API_BASE = import.meta.env.VITE_API_BASE ?? "/api"; async function parseResponse(response: Response): Promise { if (response.ok) { return response.json() as Promise; } let message = "Não foi possível concluir a operação."; try { const payload = await response.json(); if (typeof payload.detail === "string") { message = payload.detail; } } catch { message = response.statusText || message; } throw new Error(message); } export async function listarProcessos(params: { q?: string; status?: StatusFiltro; }): Promise { const query = new URLSearchParams(); if (params.q) query.set("q", params.q); if (params.status) query.set("status", params.status); const response = await fetch(`${API_BASE}/processos?${query.toString()}`); return parseResponse(response); } export async function criarProcesso(form: FormData): Promise { const response = await fetch(`${API_BASE}/processos`, { method: "POST", body: form }); return parseResponse(response); } export async function atualizarDirecao(id: number, form: FormData): Promise { const response = await fetch(`${API_BASE}/processos/${id}/direcao`, { method: "PATCH", body: form }); return parseResponse(response); } export async function excluirProcesso(id: number): Promise { const response = await fetch(`${API_BASE}/processos/${id}`, { method: "DELETE" }); if (response.ok) return; await parseResponse(response); } export async function atualizarPrazoEquipe( id: number, equipe: Equipe, payload: { prazo: string | null; data_informacao?: string | null; data_atendimento?: string | null; proxima_equipe?: Equipe | null; encerrar_fluxo?: boolean; observacoes?: string; justificativa_revisao?: string; confirmar_revisao?: boolean; } ): Promise { const response = await fetch(`${API_BASE}/processos/${id}/equipes/${equipe}/prazo`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }); return parseResponse(response); } export async function atualizarEtapaFluxo( id: number, etapaId: number, payload: { prazo: string | null; data_informacao?: string | null; data_atendimento?: string | null; observacoes?: string; justificativa_revisao?: string; confirmar_revisao?: boolean; } ): Promise { const response = await fetch(`${API_BASE}/processos/${id}/fluxo-etapas/${etapaId}`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }); return parseResponse(response); } export async function atualizarFluxoDirecao( id: number, payload: { etapa_tipo: "direcao_prazo" | "direcao_conclusao"; prazo_informado: string | null; data_resposta_direcao_origem: string | null; data_atendimento: string | null; data_informacao_conclusao_origem: string | null; observacoes_direcao: string; justificativa_revisao?: string; confirmar_revisao?: boolean; } ): Promise { const response = await fetch(`${API_BASE}/processos/${id}/direcao/fluxo`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }); return parseResponse(response); } export function urlArquivo(id: number): string { return `${API_BASE}/processos/${id}/arquivo`; } export function urlRelatorioProcessos(): string { return `${API_BASE}/processos/relatorio-priorizacoes.pdf`; }