/**
 * Маппинг ISO 3166-1 alpha-2 country code → BCP 47 locale (language).
 * Приоритет: основные языки по странам.
 */
export const countryToLocale: Record<string, string> = {
  RU: 'ru',
  UA: 'uk',
  BY: 'be',
  KZ: 'kk',
  US: 'en',
  GB: 'en',
  AU: 'en',
  CA: 'en',
  DE: 'de',
  AT: 'de',
  CH: 'de',
  FR: 'fr',
  BE: 'fr',
  ES: 'es',
  MX: 'es',
  AR: 'es',
  IT: 'it',
  PT: 'pt',
  BR: 'pt',
  PL: 'pl',
  NL: 'nl',
  SE: 'sv',
  NO: 'nb',
  DK: 'da',
  FI: 'fi',
  CZ: 'cs',
  SK: 'sk',
  HU: 'hu',
  RO: 'ro',
  BG: 'bg',
  HR: 'hr',
  RS: 'sr',
  GR: 'el',
  TR: 'tr',
  JP: 'ja',
  CN: 'zh',
  TW: 'zh-TW',
  KR: 'ko',
  IN: 'hi',
  TH: 'th',
  VI: 'vi',
  ID: 'id',
  MY: 'ms',
  SA: 'ar',
  AE: 'ar',
  EG: 'ar',
  IL: 'he',
  IR: 'fa',
};

/** Поддерживаемые локали с fallback. */
export const supportedLocales = new Set<string>([
  'en', 'ru', 'uk', 'de', 'fr', 'es', 'it', 'pt', 'pl', 'zh', 'zh-TW', 'ja', 'ko',
]);

const defaultLocale = 'en';

export function resolveLocaleFromCountry(countryCode: string | null | undefined): string {
  if (!countryCode) return defaultLocale;
  return countryToLocale[countryCode.toUpperCase()] ?? defaultLocale;
}

export function normalizeAcceptLanguage(header: string | undefined): string | null {
  if (!header || !header.trim()) return null;
  const first = header.split(',')[0]?.trim();
  if (!first) return null;
  const [lang] = first.split(';');
  const code = lang?.trim().toLowerCase().split('-')[0];
  return code ?? null;
}

export function getDefaultLocale(): string {
  return defaultLocale;
}
