import api, { autoApi } from './api'; import { Delivery, CreateDeliveryRequest, UpdateDeliveryRequest, DeliveriesResponse, DeliveryResponse, DeliveriesMapResponse, DeliveryHistoryResponse, AxiosResponse } from '../types/models'; // API Response wrappers for this service interface DeliveryTotalResponse { ok: boolean; total: number; priceprime?: number; pricesameday?: number; priceemergency?: number; total_amount?: number; discount?: number; total_amount_after_discount?: number; } interface CashResponse { ok: boolean; amount: number; } export const deliveryService = { // CRUD operations create: (customerId: number, data: CreateDeliveryRequest): Promise> => api.post(`/delivery/create/${customerId}`, data), getById: (id: number): Promise> => api.get(`/delivery/${id}`), getOrder: (id: number): Promise> => api.get(`/delivery/order/${id}`), getForMap: (date: string): Promise> => api.get(`/delivery/map`, { params: { date } }), getHistory: (startDate: string, endDate: string): Promise> => api.get(`/delivery/history`, { params: { start_date: startDate, end_date: endDate } }), update: (id: number, data: UpdateDeliveryRequest): Promise> => api.put(`/delivery/edit/${id}`, data), delete: (id: number): Promise> => api.delete(`/delivery/delete/${id}`), cancel: (id: number): Promise> => api.put(`/delivery/cancel/${id}`), markCancelled: (id: number): Promise> => api.put(`/delivery/cancelled/${id}`), // List operations getAll: (page: number = 1): Promise> => api.get(`/delivery/all/${page}`), getByCustomer: (customerId: number, page: number = 1): Promise> => api.get(`/delivery/customer/${customerId}/${page}`), getPast1: (customerId: number): Promise> => api.get(`/delivery/past1/${customerId}`), getPast2: (customerId: number): Promise> => api.get(`/delivery/past2/${customerId}`), // Status-based lists getWaiting: (page: number = 1): Promise> => api.get(`/delivery/waiting/${page}`), getTomorrow: (page: number = 1): Promise> => api.get(`/delivery/tommorrow/${page}`), getOutForDelivery: (page: number = 1): Promise> => api.get(`/delivery/outfordelivery/${page}`), getDelivered: (page: number = 1): Promise> => api.get(`/delivery/delivered/${page}`), getFinalized: (page: number = 1): Promise> => api.get(`/delivery/finalized/${page}`), getPending: (page: number = 1): Promise> => api.get(`/delivery/pending/${page}`), getIssues: (page: number = 1): Promise> => api.get(`/delivery/issue/${page}`), deleteCancelled: (id: number): Promise> => api.delete(`/delivery/cancelled/${id}`), // Totals getWaitingTotals: (): Promise> => api.get('/deliverystatus/waiting-totals'), getTodayTotals: (): Promise> => api.get('/deliverystatus/today-totals'), getTomorrowTotals: (): Promise> => api.get('/deliverystatus/tomorrow-totals'), // Status & totals updateStatus: (data: { id: number; status: number }): Promise> => api.put('/delivery/updatestatus', data), getTotal: (id: number): Promise> => api.get(`/delivery/total/${id}`), // Cash handling handleCash: (id: number, type: string): Promise> => api.get(`/delivery/cash/${id}/${type}`), // Finalize finalize: (id: number, data?: { final_price: number }): Promise> => api.put(`/deliverydata/finalize/${id}`, data), // Auto system endpoints (VITE_AUTO_URL) auto: { getDelivery: (id: number) => autoApi.get(`/delivery/delivery/${id}`), getProfileDeliveries: (id: number) => autoApi.get(`/delivery/all/profile/${id}`), getAllCustomers: () => autoApi.get('/delivery/all/customers'), getByCustomer: (id: number) => autoApi.get(`/delivery/auto/customer/${id}`), getTicket: (id: number) => autoApi.get(`/delivery/autoticket/${id}`), findDelivery: (id: number) => autoApi.get(`/delivery/finddelivery/${id}`), updateStatus: (id: number, data: any) => autoApi.put(`/delivery/update_status/${id}`, data), confirm: (data: any) => autoApi.post('/confirm/delivery', data), createTicket: (id: number, data: any) => autoApi.post(`/confirm/auto/create/${id}`, data), createTicketNoPreauth: (id: number, data: any) => autoApi.post(`/confirm/auto/create/nopreauth/${id}`, data), closeTicket: (id: number, data?: any) => autoApi.put(`/confirm/auto/close_ticket/${id}`, data), updateTicket: (id: number, data: any) => autoApi.put(`/confirm/auto/update/${id}`, data), estimateGallons: (customerId: number) => autoApi.get(`/fixstuff_customer/estimate_gallons/customer/${customerId}`), }, }; export default deliveryService;