import type { ActivityType, DashboardResponse, EvaluatorSummary, GoalPeriod, PaginatedResponse, RegistrationCard, RegistrationDetail, TeamMemberOption, TimelineItem, TimelineEntry, TimelineEntryCreatePayload, WorkItemCard, WorkItemCreatePayload, WorkItemDetail, WorkItemFormOptions, WorkItemReopenPayload, } from "./types"; const API_BASE_URL = import.meta.env.VITE_API_BASE_URL ?? (import.meta.env.DEV ? "http://127.0.0.1:8000" : ""); async function apiFetch(path: string, init?: RequestInit): Promise { const response = await fetch(`${API_BASE_URL}${path}`, { headers: { "Content-Type": "application/json", ...(init?.headers ?? {}), }, ...init, }); if (!response.ok) { const body = await response.text(); throw new Error(body || `Falha ao acessar ${path}`); } return response.json() as Promise; } export const api = { getDashboard: () => apiFetch("/dashboard"), getWorkItems: (params?: { status?: string; evaluatorId?: number; priority?: string; q?: string; month?: string }) => { const search = new URLSearchParams(); if (params?.status) search.set("status", params.status); if (params?.evaluatorId) search.set("evaluator_id", String(params.evaluatorId)); if (params?.priority) search.set("priority", params.priority); if (params?.q) search.set("q", params.q); if (params?.month) search.set("month", params.month); const query = search.toString(); return apiFetch(`/work-items${query ? `?${query}` : ""}`); }, getWorkItemsPage: (params?: { status?: string; evaluatorId?: number; priority?: string; q?: string; month?: string; page?: number }) => { const search = new URLSearchParams(); if (params?.status) search.set("status", params.status); if (params?.evaluatorId) search.set("evaluator_id", String(params.evaluatorId)); if (params?.priority) search.set("priority", params.priority); if (params?.q) search.set("q", params.q); if (params?.month) search.set("month", params.month); if (params?.page) search.set("page", String(params.page)); const query = search.toString(); return apiFetch>(`/work-items/paged${query ? `?${query}` : ""}`); }, getRegistrations: (params?: { status?: string; evaluatorId?: number; priority?: string; q?: string; month?: string }) => { const search = new URLSearchParams(); if (params?.status) search.set("status", params.status); if (params?.evaluatorId) search.set("evaluator_id", String(params.evaluatorId)); if (params?.priority) search.set("priority", params.priority); if (params?.q) search.set("q", params.q); if (params?.month) search.set("month", params.month); const query = search.toString(); return apiFetch(`/registrations${query ? `?${query}` : ""}`); }, getRegistrationsPage: (params?: { status?: string; evaluatorId?: number; priority?: string; q?: string; month?: string; page?: number }) => { const search = new URLSearchParams(); if (params?.status) search.set("status", params.status); if (params?.evaluatorId) search.set("evaluator_id", String(params.evaluatorId)); if (params?.priority) search.set("priority", params.priority); if (params?.q) search.set("q", params.q); if (params?.month) search.set("month", params.month); if (params?.page) search.set("page", String(params.page)); const query = search.toString(); return apiFetch>(`/registrations/paged${query ? `?${query}` : ""}`); }, getRegistration: (propertyId: number) => apiFetch(`/registrations/${propertyId}`), getWorkItem: (id: number) => apiFetch(`/work-items/${id}`), createWorkItem: (payload: WorkItemCreatePayload) => apiFetch("/work-items", { method: "POST", body: JSON.stringify(payload), }), updateWorkItem: (id: number, payload: WorkItemCreatePayload) => apiFetch(`/work-items/${id}`, { method: "PUT", body: JSON.stringify(payload), }), reopenWorkItem: (id: number, payload: WorkItemReopenPayload) => apiFetch(`/work-items/${id}/reopen`, { method: "POST", body: JSON.stringify(payload), }), createTimelineEntry: (id: number, payload: TimelineEntryCreatePayload) => apiFetch(`/work-items/${id}/timeline`, { method: "POST", body: JSON.stringify(payload), }), updateTimelineEntry: (workItemId: number, entryId: number, payload: TimelineEntryCreatePayload) => apiFetch(`/work-items/${workItemId}/timeline/${entryId}`, { method: "PUT", body: JSON.stringify(payload), }), deleteTimelineEntry: (workItemId: number, entryId: number) => apiFetch<{ status: string }>(`/work-items/${workItemId}/timeline/${entryId}`, { method: "DELETE", }), getEvaluators: (params?: { month?: string }) => { const search = new URLSearchParams(); if (params?.month) search.set("month", params.month); const query = search.toString(); return apiFetch(`/evaluators${query ? `?${query}` : ""}`); }, getPriorityOptions: () => apiFetch("/priority-options"), getTeamMembers: () => apiFetch("/team-members"), getTimeline: () => apiFetch("/timeline"), getGoals: () => apiFetch("/goal-periods"), getActivityTypes: () => apiFetch("/activity-types"), getWorkItemFormOptions: () => apiFetch("/work-item-form-options"), };