const SPANISH_STOPWORDS = new Set([
  "tienda",
  "store",
  "online",
  "web",
  "cordoba",
  "madrid",
  "barcelona",
  "sevilla",
  "valencia",
  "malaga",
  "zaragoza",
  "murcia",
  "granada",
  "alicante",
  "bilbao",
]);

const OCR_CORRECTIONS: Array<[RegExp, string]> = [
  [/\bmedamarkt\b/g, "mediamarkt"],
  [/\bmedia markt\b/g, "mediamarkt"],
  [/\bxiomi\b/g, "xiaomi"],
  [/\bsamsumg\b/g, "samsung"],
  [/\bel corte ingles\b/g, "el corte ingles"],
  [/\bi[ ]?kea\b/g, "ikea"],
];

export function normalizeCatalogName(value: string, options: { stripLocation?: boolean } = {}): string {
  let normalized = value
    .normalize("NFD")
    .replace(/\p{Diacritic}/gu, "")
    .toLowerCase()
    .replace(/&/g, " and ")
    .replace(/[^a-z0-9]+/g, " ")
    .trim()
    .replace(/\s+/g, " ");

  for (const [pattern, replacement] of OCR_CORRECTIONS) {
    normalized = normalized.replace(pattern, replacement);
  }

  if (!options.stripLocation) return normalized;

  return normalized
    .split(" ")
    .filter((part) => !SPANISH_STOPWORDS.has(part))
    .join(" ")
    .trim();
}
