import { get, getPaginated, post, put, del } from './api'; import type { Equipment, Revision } from '@/types'; export interface EquipmentFilters { search?: string; customerId?: string; typeId?: string; active?: boolean; page?: number; limit?: number; } export interface CreateEquipmentData { name: string; typeId: string; brand?: string; model?: string; customerId?: string; address: string; location?: string; partNumber?: string; serialNumber?: string; installDate?: string; revisionCycleStart?: string; warrantyEnd?: string; warrantyStatus?: string; description?: string; notes?: string; active?: boolean; revisionTypeIds?: string[]; tempId?: string; // For pending file uploads } export interface EquipmentScheduleItem { revisionType: { id: string; name: string; color?: string; intervalDays: number }; lastPerformed: string | null; nextDueDate: string | null; upcomingCycles: string[]; } export interface EquipmentSchedule { cycleAnchor: string; schedules: EquipmentScheduleItem[]; upcomingDates: Array<{ date: string; label: string; revisionTypes: Array<{ id: string; name: string; color?: string; intervalDays: number; cycleNumber: number; }>; }>; } export type UpdateEquipmentData = Partial; export interface CreateRevisionData { typeId: string; performedDate: string; nextDueDate?: string; findings?: string; result?: string; notes?: string; } function buildQueryString(filters: EquipmentFilters): string { const params = new URLSearchParams(); if (filters.search) params.append('search', filters.search); if (filters.customerId) params.append('customerId', filters.customerId); if (filters.typeId) params.append('typeId', filters.typeId); if (filters.active !== undefined) params.append('active', String(filters.active)); if (filters.page) params.append('page', String(filters.page)); if (filters.limit) params.append('limit', String(filters.limit)); return params.toString(); } export const equipmentApi = { getAll: (filters: EquipmentFilters = {}) => getPaginated(`/equipment?${buildQueryString(filters)}`), getById: (id: string) => get(`/equipment/${id}`), create: (data: CreateEquipmentData) => post('/equipment', data), update: (id: string, data: UpdateEquipmentData) => put(`/equipment/${id}`, data), delete: (id: string) => del(`/equipment/${id}`), // Revisions getRevisions: (equipmentId: string) => get(`/equipment/${equipmentId}/revisions`), createRevision: (equipmentId: string, data: CreateRevisionData) => post(`/equipment/${equipmentId}/revisions`, data), // Schedule getSchedule: (equipmentId: string, days?: number) => get(`/equipment/${equipmentId}/schedule${days ? `?days=${days}` : ''}`), };