import { api } from './api'; import type { FahrzeugListItem, FahrzeugDetail, FahrzeugWartungslog, VehicleStats, InspectionAlert, CreateFahrzeugPayload, UpdateFahrzeugPayload, UpdateStatusPayload, CreateWartungslogPayload, 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; }, };