export const SUPPORTED_LOCALES = ['hu', 'en'] as const;
export type AppLocale = (typeof SUPPORTED_LOCALES)[number];

const DEFAULT_LOCALE: AppLocale = 'hu';
const FALLBACK_LOCALES: AppLocale[] = [...SUPPORTED_LOCALES];
const FALLBACK_PROTECTED_LOCALES: AppLocale[] = ['en'];

function parseEnvList(value?: string | null): string[] {
  return (value || '')
    .split(',')
    .map((locale) => locale.trim())
    .filter(Boolean);
}

function unique<T extends string>(items: T[]): T[] {
  return Array.from(new Set(items));
}

export function isAppLocale(locale: string): locale is AppLocale {
  return (SUPPORTED_LOCALES as readonly string[]).includes(locale);
}

const envLocales = parseEnvList(process.env.NEXT_PUBLIC_I18N_ENABLED_LOCALES).filter(isAppLocale);
const configuredLocales = envLocales.length > 0 ? envLocales : [...FALLBACK_LOCALES];

if (!configuredLocales.includes(DEFAULT_LOCALE)) {
  configuredLocales.unshift(DEFAULT_LOCALE);
}

export const appLocales: AppLocale[] = unique(configuredLocales);
export const defaultLocale: AppLocale = DEFAULT_LOCALE;

const envProtectedLocales = parseEnvList(process.env.NEXT_PUBLIC_I18N_PROTECTED_LOCALES).filter(
  isAppLocale
);

const configuredProtectedLocales =
  envProtectedLocales.length > 0 ? envProtectedLocales : [...FALLBACK_PROTECTED_LOCALES];

export const protectedLocales: AppLocale[] = unique(configuredProtectedLocales).filter((locale) =>
  appLocales.includes(locale)
);
