/** Convert Arabic-Indic / Eastern digits to Western 0-9. */
export function toWesternDigits(value: string) {
  return value
    .replace(/[٠-٩]/g, (d) => String(d.charCodeAt(0) - 0x0660))
    .replace(/[۰-۹]/g, (d) => String(d.charCodeAt(0) - 0x06F0));
}

/**
 * Normalize phone for Libya/Tunisia mobile entry on phones.
 * Accepts: +2189…, 09xxxxxxxx, 9xxxxxxxx, 00…, spaces/dashes, Arabic digits.
 */
export function normalizePhone(input: string) {
  let s = toWesternDigits(input).trim();
  s = s.replace(/[()\s.\-_/]/g, "");
  if (!s) return s;

  if (s.startsWith("00")) s = `+${s.slice(2)}`;

  if (!s.startsWith("+")) {
    // Libya local mobile: 09xxxxxxxx → +2189xxxxxxx
    if (/^09\d{8}$/.test(s)) s = `+218${s.slice(1)}`;
    // Libya without leading 0: 9xxxxxxxx
    else if (/^9\d{8}$/.test(s)) s = `+218${s}`;
    // Tunisia local 8-digit mobiles
    else if (/^[2459]\d{7}$/.test(s)) s = `+216${s}`;
    else if (/^\d{8,15}$/.test(s)) s = `+${s}`;
  }

  return s;
}

export function isValidE164Phone(phone: string) {
  return /^\+[1-9]\d{7,14}$/.test(phone);
}

export function normalizeEmail(input: string) {
  return toWesternDigits(input)
    .trim()
    .replace(/[\u200B-\u200D\uFEFF]/g, "")
    .toLowerCase();
}
