import type { Lang } from "@/lib/catalog";

const TEHRAN = "Asia/Tehran";

export function mobileKey(input: string) {
  let digits = input.replace(/\D/g, "");
  if (digits.startsWith("00")) digits = digits.slice(2);
  if (digits.startsWith("98") && digits.length > 10) digits = digits.slice(2);
  if (digits.startsWith("0")) digits = digits.slice(1);
  return digits;
}

export function faNum(value: number) {
  return new Intl.NumberFormat("fa-IR").format(value);
}

export function formatTehran(iso: string, lang: Lang) {
  const date = new Date(iso);
  if (Number.isNaN(date.getTime())) return iso;
  const locale = lang === "fa" ? "fa-IR" : lang === "ar" ? "ar" : "en-GB";
  try {
    return new Intl.DateTimeFormat(locale, {
      timeZone: TEHRAN,
      year: "numeric",
      month: "short",
      day: "numeric",
      hour: "2-digit",
      minute: "2-digit",
    }).format(date);
  } catch {
    return iso;
  }
}

export function formatDay(day: string | null | undefined, lang: Lang) {
  if (!day) return "";
  const date = new Date(`${day}T00:00:00Z`);
  if (Number.isNaN(date.getTime())) return day;
  const locale = lang === "fa" ? "fa-IR" : lang === "ar" ? "ar" : "en-GB";
  try {
    return new Intl.DateTimeFormat(locale, {
      timeZone: "UTC",
      year: "numeric",
      month: "short",
      day: "numeric",
    }).format(date);
  } catch {
    return day;
  }
}

export function tehranLocalInputToIso(local: string) {
  if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/.test(local)) return null;
  const date = new Date(`${local}:00+03:30`);
  if (Number.isNaN(date.getTime())) return null;
  const year = date.getUTCFullYear();
  if (year < 2000 || year > 2100) return null;
  return date.toISOString();
}

export function isDay(value: string) {
  if (!/^\d{4}-\d{2}-\d{2}$/.test(value)) return false;
  const date = new Date(`${value}T00:00:00Z`);
  if (Number.isNaN(date.getTime())) return false;
  return date.toISOString().slice(0, 10) === value;
}

export function joinServices(labels: string[], lang: Lang) {
  return labels.join(lang === "en" ? ", " : "، ");
}
