import { api } from '../auth/http';
import { URL_CONSTANTS } from '@/constants/URLS';

export const FIRST_MILE_STATUSES = [
  'PAYMENT_PENDING',
  'READY_TO_TRANSIT',
  'IN_TRANSIT',
  'RECEIVED_TO_PORT',
] as const;
export type FirstMileApiStatus = (typeof FIRST_MILE_STATUSES)[number];

export interface FirstMileBooking {
  id: string;
  reference: string;
  firstMilePickupAddress?: string | null;
  cargoFreeText?: string | null;
  cargoTotalWeightVgm: number;
  totalAmount: number;
  scheduledDate?: string | null;
  company?: { id: string; name?: string; phone?: string | null; contactPersonName?: string | null; contactPersonPhone?: string | null } | null;
  serviceType?: { id: string; name?: string } | null;
  originYard?: { id: string; name?: string } | null;
  destinationYard?: { id: string; name?: string } | null;
  cargoType?: { id: string; name?: string } | null;
}

export interface FirstMileVehicle {
  id: string;
  plateNumber: string;
  manufacturer: string;
  model: string;
}

export interface FirstMileRecord {
  id: string;
  bookingId: string;
  status: FirstMileApiStatus;
  advancedPayment: number;
  remainingPayment: number;
  estimatedKm?: number | null;
  exactKm?: number | null;
  vehicleId?: string | null;
  booking?: FirstMileBooking | null;
  vehicle?: FirstMileVehicle | null;
  createdAt: string;
  updatedAt: string;
}

export interface FirstMileListResponse {
  data: FirstMileRecord[];
  meta: { total: number; page: number; pageSize: number; totalPages: number };
}

const FM = URL_CONSTANTS.FIRST_MILE;

export const firstMileService = {
  list: (pageSize = 1000) =>
    api.get<FirstMileListResponse>(`${FM.BASE}?pageSize=${pageSize}`),
  getById: (id: string) => api.get<FirstMileRecord>(FM.BY_ID(id)),
  update: (id: string, data: { status?: FirstMileApiStatus; vehicleId?: string | null }) =>
    api.patch<FirstMileRecord>(FM.BY_ID(id), data),
  accept: (bookingReference: string) =>
    api.post<FirstMileRecord>(FM.ACCEPT(bookingReference)),
};
