import { api } from './api'; import type { FahrzeugListItem, FahrzeugDetail, FahrzeugWartungslog, VehicleStats, InspectionAlert, CreateFahrzeugPayload, UpdateFahrzeugPayload, UpdateStatusPayload, CreateWartungslogPayload, UpdateWartungslogPayload, StatusUpdateResponse, } from '../types/vehicle.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 vehiclesApi = { async getAll(): Promise { return unwrap(api.get<{ success: boolean; data: FahrzeugListItem[] }>('/api/vehicles')); }, async getStats(): Promise { return unwrap(api.get<{ success: boolean; data: VehicleStats }>('/api/vehicles/stats')); }, async getAlerts(daysAhead = 30): Promise { return unwrap( api.get<{ success: boolean; data: InspectionAlert[] }>( `/api/vehicles/alerts?daysAhead=${daysAhead}` ) ); }, async getById(id: string): Promise { return unwrap(api.get<{ success: boolean; data: FahrzeugDetail }>(`/api/vehicles/${id}`)); }, async create(payload: CreateFahrzeugPayload): Promise { const response = await api.post<{ success: boolean; data: FahrzeugDetail }>( '/api/vehicles', 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: UpdateFahrzeugPayload): Promise { const response = await api.patch<{ success: boolean; data: FahrzeugDetail }>( `/api/vehicles/${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/vehicles/${id}`); }, async updateStatus(id: string, payload: UpdateStatusPayload): Promise { const response = await api.patch<{ success: boolean; data: StatusUpdateResponse }>( `/api/vehicles/${id}/status`, payload ); return response.data?.data ?? { overlappingBookings: [] }; }, async getWartungslog(id: string): Promise { return unwrap( api.get<{ success: boolean; data: FahrzeugWartungslog[] }>(`/api/vehicles/${id}/wartung`) ); }, async addWartungslog(id: string, payload: CreateWartungslogPayload): Promise { const response = await api.post<{ success: boolean; data: FahrzeugWartungslog }>( `/api/vehicles/${id}/wartung`, payload ); if (response.data?.data === undefined || response.data?.data === null) { throw new Error('Invalid API response'); } return response.data.data; }, async updateWartungslog(vehicleId: string, wartungId: string, payload: UpdateWartungslogPayload): Promise { const response = await api.patch<{ success: boolean; data: FahrzeugWartungslog }>( `/api/vehicles/${vehicleId}/wartung/${wartungId}`, payload ); if (response.data?.data === undefined || response.data?.data === null) { throw new Error('Invalid API response'); } return response.data.data; }, async exportAlerts(): Promise { const response = await api.get('/api/vehicles/alerts/export', { responseType: 'blob', }); return response.data as Blob; }, async getStatusHistory(id: string): Promise<{ alter_status: string; neuer_status: string; bemerkung?: string; geaendert_von_name?: string; erstellt_am: string }[]> { return unwrap(api.get(`/api/vehicles/${id}/status-history`)); }, async uploadWartungFile(wartungId: number, file: File): Promise { const formData = new FormData(); formData.append('datei', file); const r = await api.post(`/api/vehicles/wartung/${wartungId}/upload`, formData, { headers: { 'Content-Type': 'multipart/form-data' }, }); return r.data.data; }, };