const ZERO_DECIMAL_CURRENCIES = new Set([ 'bif', 'clp', 'djf', 'gnf', 'jpy', 'kmf', 'krw', 'mga', 'pyg', 'rwf', 'ugx', 'vnd', 'vuv', 'xaf', 'xof', 'xpf', ]); const THREE_DECIMAL_CURRENCIES = new Set(['bhd', 'jod', 'kwd', 'omr', 'tnd']); export function currencyMinorUnitDigits(currency: string): number { const normalized = currency.trim().toLowerCase(); if (ZERO_DECIMAL_CURRENCIES.has(normalized)) return 0; if (THREE_DECIMAL_CURRENCIES.has(normalized)) return 3; return 2; } export function majorToMinor(amountMajor: number, currency: string): number { if (!Number.isFinite(amountMajor) || amountMajor < 0) return 0; return Math.round(amountMajor * (10 ** currencyMinorUnitDigits(currency))); } export function minorToMajor(amountMinor: number, currency: string): number { if (!Number.isFinite(amountMinor)) return 0; return amountMinor / (10 ** currencyMinorUnitDigits(currency)); } export function bookingAmountMinor(ratePerMinute: number, durationMinutes: number, currency: string): number { return majorToMinor(ratePerMinute * durationMinutes, currency); }