import { randomUUID } from "node:crypto"; export type AxelPlaceLocation = Record; export type AxelCargoInput = { palletCount: number; weightLb: number; lengthIn: number; widthIn: number; heightIn: number; }; function buildAutocompleteResult( description: string, placeId: string, ): Record { const parts = description.split(",").map((p) => p.trim()); return { description, mainText: parts[0] ?? description, placeId, secondaryText: parts.slice(1).join(", "), types: ["geocode"], }; } export function enrichAxelLocation( raw: AxelPlaceLocation, description: string, ): AxelPlaceLocation { const placeId = String(raw.placeId ?? ""); return { ...raw, placeId, autocompleteResult: buildAutocompleteResult(description, placeId), serviceStartTime: "12:00am", serviceEndTime: "11:59pm", }; } export function buildAxelCargo( cargo: AxelCargoInput, ): Record { const id = randomUUID(); return { [id]: { length: cargo.lengthIn, width: cargo.widthIn, height: cargo.heightIn, quantity: cargo.palletCount, weight: cargo.weightLb, type: "Pallet", }, }; } export function buildPickupDateIso(date = new Date()): string { const pickupDate = new Date(date); pickupDate.setUTCHours(19, 0, 0, 0); return pickupDate.toISOString(); } export function buildAxelShipmentPayload(input: { pickup: AxelPlaceLocation; delivery: AxelPlaceLocation; pickupDescription: string; deliveryDescription: string; cargo: AxelCargoInput; pickupDate?: Date; }): Record { return { pickupDate: buildPickupDateIso(input.pickupDate), pickupLocation: enrichAxelLocation(input.pickup, input.pickupDescription), deliveryLocation: enrichAxelLocation( input.delivery, input.deliveryDescription, ), cargo: buildAxelCargo(input.cargo), }; }