import { type Locale, WORD_GRID_LOCALES } from "./locales"; export const wordPackAvailable = (locale: Locale) => WORD_GRID_LOCALES.includes(locale); export const WORD_PACK_VERSION = "2026-09-1"; export function normalizePackWord(value: unknown, locale: Locale = "en") { const input = String(value ?? "").trim(); if (locale === "en") return input.toUpperCase(); // Spanish Ñ is a separate letter; acute accents remain optional for tracing. const protectedInput = locale === "es" ? input.normalize("NFC").replace(/ñ/gi, "\u0001") : input; const normalized = locale === "de" ? protectedInput.normalize("NFC").replace(/ß/gi, "ss") : protectedInput.normalize("NFD").replace(/\p{M}/gu, "").replace(/œ/gi, "oe").replace(/æ/gi, "ae"); return normalized.replaceAll("\u0001", "ñ").toLocaleUpperCase(locale); } export function packTileLetters(value: unknown, locale: Locale = "en") { const tile = locale === "en" ? String(value ?? "").toUpperCase() : normalizePackWord(value, locale); if (locale === "en") return tile === "Q" || tile === "QU" ? "QU" : /^[A-Z]$/.test(tile) ? tile : ""; if (!wordPackAvailable(locale)) return ""; return (locale === "es" ? /^[A-ZÑ]$/ : locale === "de" ? /^(?:[A-ZÄÖÜ]|SS)$/ : /^[A-Z]$/).test(tile) ? tile : ""; }