import type { Ride } from "@/types/type"; export const sortRides = (rides: Ride[]): Ride[] => { return [...rides].sort( (a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime(), ); }; export function formatTime(minutes: number): string { const formattedMinutes = Math.round(minutes) || 0; if (formattedMinutes < 60) { return `${formattedMinutes} min`; } else { const hours = Math.floor(formattedMinutes / 60); const remainingMinutes = formattedMinutes % 60; return `${hours}h ${remainingMinutes}m`; } } export function formatDate(dateString: string): string { const date = new Date(dateString); const day = date.getDate(); const monthNames = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ]; const month = monthNames[date.getMonth()]; const year = date.getFullYear(); return `${day < 10 ? "0" + day : day} ${month} ${year}`; } // Normalizes a Lebanese phone number to E.164 (+961...). export function normalizePhone(raw: string): string { const cleaned = raw.replace(/[^\d+]/g, ""); if (cleaned.startsWith("+")) return cleaned; return `+961${cleaned.replace(/^0+/, "")}`; } // Great-circle distance between two lat/lng points, in meters. Used for // nearest-driver matching and "X m away" POI chips. Haversine formula. export function haversine( lat1: number, lng1: number, lat2: number, lng2: number, ): number { const R = 6371000; // Earth radius, meters const toRad = (d: number) => (d * Math.PI) / 180; const dLat = toRad(lat2 - lat1); const dLng = toRad(lng2 - lng1); const a = Math.sin(dLat / 2) ** 2 + Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLng / 2) ** 2; return 2 * R * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); }