import { tr } from "@/lib/i18n"; 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(), ); }; // Unit words and month names are localized through the module-level translator // in lib/i18n (set by I18nProvider). Until the provider boots, `tr` falls back // to English, so these stay safe to call during the initial render. export function formatTime(minutes: number): string { const formattedMinutes = Math.round(minutes) || 0; if (formattedMinutes < 60) { return tr("units.min", {}, formattedMinutes); } const hours = Math.floor(formattedMinutes / 60); const remainingMinutes = formattedMinutes % 60; return tr("units.hoursMinutes", { h: hours, m: remainingMinutes }); } export function formatDate(dateString: string): string { const date = new Date(dateString); const day = date.getDate(); const monthKeys = [ "months.jan", "months.feb", "months.mar", "months.apr", "months.may", "months.jun", "months.jul", "months.aug", "months.sep", "months.oct", "months.nov", "months.dec", ]; const month = tr(monthKeys[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)); }