import { currentLocale, t } from '@/i18n'; export function formatBytes(bytes?: number | null): string { if (!bytes || bytes <= 0) return '—'; const mb = bytes / (1024 * 1024); if (mb >= 1) return `${mb.toFixed(1)} MB`; const kb = bytes / 1024; return `${Math.max(1, Math.round(kb))} KB`; } /** Locale-aware short date, e.g. "12 Jun 2026" / "12 giu 2026". */ export function formatDate(iso?: string | null): string { if (!iso) return '—'; const d = new Date(iso); if (Number.isNaN(d.getTime())) return iso; try { return d.toLocaleDateString(currentLocale(), { day: '2-digit', month: 'short', year: 'numeric', }); } catch { return d.toISOString().slice(0, 10); } } /** Whole days from now until `iso` (negative = past). */ export function daysUntil(iso?: string | null): number | null { if (!iso) return null; const d = new Date(iso); if (Number.isNaN(d.getTime())) return null; return Math.ceil((d.getTime() - Date.now()) / 86_400_000); } /** Short human expiry label, e.g. "24 days", "Expired", "Valid". */ export function expiryLabel(status?: string | null, expiryDate?: string | null): string { if (status === 'expired') return t('expiry.expired'); if (status === 'expiring') { const days = daysUntil(expiryDate); return days != null && days >= 0 ? t('expiry.days', { count: days }) : t('expiry.expiring'); } return t('expiry.valid'); }