import { getRequestConfig } from 'next-intl/server';
import { routing } from './routing';

// Explicit loaders with literal import paths — webpack statically analyses each one.
// A single template-literal import would produce broken dynamic chunks in dev.
const LOADERS: Record<string, () => Promise<{ default: object }>> = {
  'en-GB': () => import('../messages/en.json'),
  'de-DE': () => import('../messages/de.json'),
  'fr-FR': () => import('../messages/fr.json'),
  'es-ES': () => import('../messages/es.json'),
  'it-IT': () => import('../messages/it.json'),
  'nl-NL': () => import('../messages/nl.json'),
  'pl-PL': () => import('../messages/pl.json'),
  'pt-PT': () => import('../messages/pt.json'),
  'ja-JP': () => import('../messages/ja.json'),
  'ko-KR': () => import('../messages/ko.json'),
  'ru-RU': () => import('../messages/ru.json'),
  'uk-UA': () => import('../messages/uk.json'),
  'sr-RS': () => import('../messages/sr.json'),
  'mk-MK': () => import('../messages/mk.json'),
  'bg-BG': () => import('../messages/bg.json'),
  'hr-HR': () => import('../messages/hr.json'),
  'sl-SI': () => import('../messages/sl.json'),
  'sr-ME': () => import('../messages/cnr.json'),
  'bs-BA': () => import('../messages/bs.json'),
  'sq-AL': () => import('../messages/sq.json'),
  'el-GR': () => import('../messages/el.json'),
};

export default getRequestConfig(async ({ requestLocale }) => {
  let locale = await requestLocale;
  if (!locale || !routing.locales.includes(locale as (typeof routing.locales)[number])) {
    locale = routing.defaultLocale;
  }
  const loader = LOADERS[locale] ?? LOADERS['en-GB'];
  const messages = (await loader()).default;
  return { locale, messages };
});
