export const DEFAULT_CURRENCY = "MAD";

export function fmtMoney(amount: number | null | undefined, currency = DEFAULT_CURRENCY, opts: { compact?: boolean; signed?: boolean; whole?: boolean } = {}): string {
  const v = amount ?? 0;
  if (opts.compact && Math.abs(v) >= 10_000) {
    const n = Math.abs(v) >= 1_000_000 ? `${(v / 1_000_000).toFixed(1)}M` : `${(v / 1000).toFixed(1)}k`;
    return `${opts.signed && v > 0 ? "+" : ""}${n} ${currency}`;
  }
  const s = new Intl.NumberFormat("en-US", opts.whole ? { maximumFractionDigits: 0 } : { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(Math.abs(v) >= 1000 && opts.whole ? Math.round(v) : v);
  return `${opts.signed && v > 0 ? "+" : ""}${s} ${currency}`;
}

export function fmtNumber(n: number | null | undefined, digits = 0): string {
  return new Intl.NumberFormat("en-US", { maximumFractionDigits: digits }).format(n ?? 0);
}

export function fmtPercent(n: number | null | undefined, digits = 1): string {
  if (n === null || n === undefined) return "—";
  return `${n.toFixed(digits)}%`;
}

export function fmtPhone(p: string | null | undefined): string {
  if (!p) return "—";
  const digits = p.replace(/[^\d+]/g, "");
  if (digits.startsWith("+212") && digits.length === 13) {
    return `+212 ${digits.slice(4, 5)} ${digits.slice(5, 7)} ${digits.slice(7, 9)} ${digits.slice(9, 11)} ${digits.slice(11)}`;
  }
  if (digits.startsWith("0") && digits.length === 10) {
    return `${digits.slice(0, 2)} ${digits.slice(2, 4)} ${digits.slice(4, 6)} ${digits.slice(6, 8)} ${digits.slice(8)}`;
  }
  return p;
}

export function normalizePhone(p: string): string {
  const digits = p.replace(/[^\d+]/g, "");
  if (digits.startsWith("0") && digits.length === 10) return `+212${digits.slice(1)}`;
  if (digits.startsWith("212") && !digits.startsWith("+")) return `+${digits}`;
  return digits;
}
