/**
 * قالب‌بندی نمایشی: قیمت به تومان، اعداد فارسی و تاریخ شمسی.
 * از Intl داخلی استفاده می‌کنیم تا به کتابخانه اضافه نیازی نباشد.
 */

const TEHRAN_TZ = "Asia/Tehran";
const numberFormatter = new Intl.NumberFormat("fa-IR");

/** عدد با ارقام فارسی و جداکننده هزارگان: ۱٬۲۵۰٬۰۰۰ */
export function faNumber(value: number): string {
  return numberFormatter.format(value);
}

/** قیمت به تومان: «۱٬۲۵۰٬۰۰۰ تومان» */
export function formatToman(value: number): string {
  return `${numberFormatter.format(value)} تومان`;
}

/** تبدیل ارقام لاتین داخل یک رشته به ارقام فارسی (برای کدها و شماره‌ها) */
export function faDigits(input: string | number): string {
  return String(input).replace(/\d/g, (d) => "۰۱۲۳۴۵۶۷۸۹"[Number(d)]);
}

const jalaliLong = new Intl.DateTimeFormat("fa-IR-u-ca-persian", {
  year: "numeric",
  month: "long",
  day: "numeric",
  timeZone: TEHRAN_TZ,
});

const jalaliShort = new Intl.DateTimeFormat("fa-IR-u-ca-persian", {
  year: "numeric",
  month: "2-digit",
  day: "2-digit",
  timeZone: TEHRAN_TZ,
});

/** تاریخ شمسی بلند: «۵ آبان ۱۴۰۵» */
export function formatJalali(date: Date | string): string {
  return jalaliLong.format(new Date(date));
}

/** تاریخ شمسی کوتاه: «۱۴۰۵/۰۸/۰۵» */
export function formatJalaliShort(date: Date | string): string {
  return jalaliShort.format(new Date(date));
}

/** درصد تخفیف نسبت به قیمت قبلی (گرد شده) */
export function discountPercent(price: number, compareAt?: number): number {
  if (!compareAt || compareAt <= price) return 0;
  return Math.round(((compareAt - price) / compareAt) * 100);
}

/** سال جاری شمسی: «۱۴۰۵» */
export function currentJalaliYear(): string {
  return new Intl.DateTimeFormat("fa-IR-u-ca-persian", { year: "numeric", timeZone: TEHRAN_TZ }).format(new Date()).replace(/[^۰-۹]/g, "");
}
