import { api } from './api'; import type { AusruestungListItem, AusruestungDetail, AusruestungWartungslog, AusruestungKategorie, EquipmentStats, VehicleEquipmentWarning, CreateAusruestungPayload, UpdateAusruestungPayload, UpdateAusruestungStatusPayload, CreateAusruestungWartungslogPayload, } from '../types/equipment.types'; async function unwrap( promise: ReturnType> ): Promise { const response = await promise; if (response.data?.data === undefined || response.data?.data === null) { throw new Error('Invalid API response'); } return response.data.data; } export const equipmentApi = { async getAll(): Promise { return unwrap(api.get<{ success: boolean; data: AusruestungListItem[] }>('/api/equipment')); }, async getById(id: string): Promise { return unwrap(api.get<{ success: boolean; data: AusruestungDetail }>(`/api/equipment/${id}`)); }, async getByVehicle(fahrzeugId: string): Promise { return unwrap( api.get<{ success: boolean; data: AusruestungListItem[] }>( `/api/equipment/vehicle/${fahrzeugId}` ) ); }, async getCategories(): Promise { return unwrap( api.get<{ success: boolean; data: AusruestungKategorie[] }>('/api/equipment/categories') ); }, async getStats(): Promise { return unwrap(api.get<{ success: boolean; data: EquipmentStats }>('/api/equipment/stats')); }, async getAlerts(daysAhead = 30): Promise { return unwrap( api.get<{ success: boolean; data: AusruestungListItem[] }>( `/api/equipment/alerts?daysAhead=${daysAhead}` ) ); }, async getVehicleWarnings(): Promise { return unwrap( api.get<{ success: boolean; data: VehicleEquipmentWarning[] }>( '/api/equipment/vehicle-warnings' ) ); }, async create(payload: CreateAusruestungPayload): Promise { const response = await api.post<{ success: boolean; data: AusruestungDetail }>( '/api/equipment', payload ); if (response.data?.data === undefined || response.data?.data === null) { throw new Error('Invalid API response'); } return response.data.data; }, async update(id: string, payload: UpdateAusruestungPayload): Promise { const response = await api.patch<{ success: boolean; data: AusruestungDetail }>( `/api/equipment/${id}`, payload ); if (response.data?.data === undefined || response.data?.data === null) { throw new Error('Invalid API response'); } return response.data.data; }, async delete(id: string): Promise { await api.delete(`/api/equipment/${id}`); }, async updateStatus(id: string, payload: UpdateAusruestungStatusPayload): Promise { await api.patch(`/api/equipment/${id}/status`, payload); }, async addWartungslog( id: string, payload: CreateAusruestungWartungslogPayload ): Promise { const response = await api.post<{ success: boolean; data: AusruestungWartungslog }>( `/api/equipment/${id}/wartung`, payload ); if (response.data?.data === undefined || response.data?.data === null) { throw new Error('Invalid API response'); } return response.data.data; }, async getStatusHistory(id: string): Promise> { const response = await api.get<{ success: boolean; data: any[] }>( `/api/equipment/${id}/status-history` ); return response.data.data ?? []; }, };