import { getExampleNumber } from "libphonenumber-js";
import examples from "libphonenumber-js/mobile/examples";

export const PHONE_CODE_RU = "+7";
export const PHONE_COUNTRY_RU = "RU" as const;

/** Локальная часть примера номера (без кода страны) для маски */
export function getRuMobileExampleLocal(): string | undefined {
  return getExampleNumber(PHONE_COUNTRY_RU, examples)
    ?.formatInternational()
    .split(" ")
    .slice(1)
    .join(" ");
}

export function buildRuPhoneMask(placeholderLocal: string | undefined): string {
  return `${PHONE_CODE_RU} ${(placeholderLocal?.replace(/\d/g, "9") ?? "")}`;
}

/** Только цифры: 7 + до 10 цифр номера (без +) */
export function ruPhoneDigits(stored: string): string {
  let d = stored.replace(/\D/g, "");
  if (d.startsWith("8")) d = "7" + d.slice(1);
  if (d.length === 0) return "";
  if (!d.startsWith("7")) d = "7" + d;
  return d.slice(0, 11);
}

/** Отображение +7 (XXX) XXX-XX-XX без react-input-mask (совместимо с React 19) */
export function formatRuPhoneDisplay(stored: string): string {
  const d = ruPhoneDigits(stored);
  if (!d) return "";
  const n = d.slice(1);
  if (n.length === 0) return "+7";

  const a = n.slice(0, 3);
  const b = n.slice(3, 6);
  const c = n.slice(6, 8);
  const e = n.slice(8, 10);

  let s = "+7 (" + a;
  if (n.length <= 3) return s;
  s += ") " + b;
  if (n.length <= 6) return s;
  s += "-" + c;
  if (n.length <= 8) return s;
  s += "-" + e;
  return s;
}

export function normalizeRuPhoneFromInput(
  cleanValue: string,
  inputType: string | undefined
): string {
  const shouldAddPhoneCode =
    inputType !== "insertFromPaste" &&
    inputType !== "insertFromDrop" &&
    inputType !== "insertCompositionText" &&
    !cleanValue.startsWith("+") &&
    !cleanValue.startsWith("7") &&
    !cleanValue.startsWith(PHONE_CODE_RU.replace("+", ""));

  return (shouldAddPhoneCode ? PHONE_CODE_RU : "") + cleanValue;
}
