import { api } from '@/lib/api' import type { PaginatedResponse, RideResponse, CancelRequestResponse, LoadingSheetResponse, DeliveryTaskResponse, RideType, RideStatus, CancelRequestType, LoadingSheetStatus, } from '@/types/api' import type { PageParams } from './master' // ─── Rides ──────────────────────────────────────────────────────────────────── export interface RideBody { rideType: RideType vehicleId: string driverProfileId: string routeId: string sourceWarehouseId: string meterstart: number } export interface RideListParams extends PageParams { status?: RideStatus rideType?: RideType driverProfileId?: string vehicleId?: string } export interface CancelRequestBody { typeCode: CancelRequestType reason: string } export const rides = { list: (params?: RideListParams) => api.get>('/rides', { params }).then(r => r.data), get: (id: string) => api.get(`/rides/${id}`).then(r => r.data), create: (body: RideBody) => api.post('/rides', body).then(r => r.data), assignDriver: (id: string, driverProfileId: string) => api.put(`/rides/${id}/driver`, { driverProfileId }).then(r => r.data), activate: (id: string) => api.patch(`/rides/${id}/activate`).then(r => r.data), close: (id: string, meterend: number) => api.patch(`/rides/${id}/close`, { meterend }).then(r => r.data), cancelRequests: { getForRide: (rideId: string) => api.get(`/rides/${rideId}/cancel-request`).then(r => r.data), raise: (rideId: string, body: CancelRequestBody) => api.post(`/rides/${rideId}/cancel-request`, body).then(r => r.data), approve: (requestId: string) => api.post(`/rides/cancel-requests/${requestId}/approve`).then(r => r.data), reject: (requestId: string) => api.post(`/rides/cancel-requests/${requestId}/reject`).then(r => r.data), }, } // ─── Loading Sheets ─────────────────────────────────────────────────────────── export interface LoadingSheetItemBody { itemId: string quantityDispatched: number } export interface LoadingSheetBody { rideId: string sourceWarehouseId: string items: LoadingSheetItemBody[] } export interface LoadingSheetReceiptItemBody { itemId: string quantityReceived: number } export interface LoadingSheetListParams extends PageParams { rideId?: string status?: LoadingSheetStatus } export const loadingSheets = { list: (params?: LoadingSheetListParams) => api.get>('/loading-sheets', { params }).then(r => r.data), get: (id: string) => api.get(`/loading-sheets/${id}`).then(r => r.data), create: (body: LoadingSheetBody) => api.post('/loading-sheets', body).then(r => r.data), confirmDispatch: (id: string) => api.patch(`/loading-sheets/${id}/dispatch`).then(r => r.data), confirmReceipt: (id: string, items: LoadingSheetReceiptItemBody[]) => api.patch(`/loading-sheets/${id}/receipt`, { items }).then(r => r.data), resolve: (id: string) => api.patch(`/loading-sheets/${id}/resolve`).then(r => r.data), } // ─── Delivery Tasks ─────────────────────────────────────────────────────────── export interface DeliveryTaskItemQuantity { itemId: string quantityFulfilled: number } export const deliveryTasks = { generate: (rideId: string) => api.post(`/rides/${rideId}/tasks/generate`).then(r => r.data), listByRide: (rideId: string) => api.get(`/rides/${rideId}/delivery-tasks`).then(r => r.data), get: (id: string) => api.get(`/delivery-tasks/${id}`).then(r => r.data), setQuantities: (id: string, items: DeliveryTaskItemQuantity[]) => api.put(`/delivery-tasks/${id}/quantities`, { items }).then(r => r.data), confirm: (id: string) => api.post(`/delivery-tasks/${id}/confirm`).then(r => r.data), fail: (id: string, note: string) => api.post(`/delivery-tasks/${id}/fail`, { note }).then(r => r.data), }