export function formatRial(amount: number): string { return new Intl.NumberFormat('fa-IR').format(amount) + ' تومان'; } export function formatNumber(n: number): string { return new Intl.NumberFormat('fa-IR').format(n); } export function toDate(val: string | number | null | undefined): Date | null { if (val == null || val === '') return null; if (typeof val === 'number') return new Date(val * 1000); // Y-m-d → treat as local noon to avoid UTC-off-by-one if (/^\d{4}-\d{2}-\d{2}$/.test(val)) return new Date(`${val}T12:00:00`); return new Date(val); } export function formatDate(val: string | number | null | undefined): string { const d = toDate(val); if (!d || isNaN(d.getTime())) return '—'; return new Intl.DateTimeFormat('fa-IR-u-ca-persian', { year: 'numeric', month: '2-digit', day: '2-digit', }).format(d); } export function formatDateTime(val: string | number | null | undefined): string { const d = toDate(val); if (!d || isNaN(d.getTime())) return '—'; return new Intl.DateTimeFormat('fa-IR-u-ca-persian', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', }).format(d); } export function toGregorianDate(d: Date): string { const y = d.getFullYear(); const m = String(d.getMonth() + 1).padStart(2, '0'); const day = String(d.getDate()).padStart(2, '0'); return `${y}-${m}-${day}`; } export function maskMobile(mobile: string): string { if (mobile.length < 7) return mobile; return mobile.slice(0, 4) + '***' + mobile.slice(-3); } export function cn(...classes: (string | undefined | null | false)[]): string { return classes.filter(Boolean).join(' '); }