const currencyFormatter = new Intl.NumberFormat('fa-IR', { maximumFractionDigits: 0, }) const numberFormatter = new Intl.NumberFormat('fa-IR', { maximumFractionDigits: 2, }) const jalaliDateFormatter = new Intl.DateTimeFormat('fa-IR-u-ca-persian', { year: 'numeric', month: '2-digit', day: '2-digit', }) const jalaliDateTimeFormatter = new Intl.DateTimeFormat('fa-IR-u-ca-persian', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', }) /** Formats an amount as Toman with Persian digits and grouping. */ export function formatMoney(amount: number): string { return currencyFormatter.format(Math.round(amount)) } export function formatMoneyWithUnit(amount: number, unit = 'تومان'): string { return `${formatMoney(amount)} ${unit}` } export function formatNumber(value: number): string { return numberFormatter.format(value) } /** Formats an ISO date string to a Jalali (Persian) date. */ export function formatDate(iso: string): string { const date = new Date(iso) if (Number.isNaN(date.getTime())) return '-' return jalaliDateFormatter.format(date) } export function formatDateTime(iso: string): string { const date = new Date(iso) if (Number.isNaN(date.getTime())) return '-' return jalaliDateTimeFormatter.format(date) } /** Returns today's date as an ISO yyyy-mm-dd string for date inputs. */ export function todayISO(): string { return new Date().toISOString().slice(0, 10) } const toPersianDigits = (input: string): string => input.replace(/[0-9]/g, (digit) => '۰۱۲۳۴۵۶۷۸۹'[Number(digit)]) export function toFa(value: string | number): string { return toPersianDigits(String(value)) }