/**
 * Mehrsprachigkeits-Grundlagen.
 *
 * Die App ist für europäische Unternehmen gedacht — alle Inhalte
 * (UI, Regel-Engine, Content-Pack, Dokumente) sind lokalisierbar.
 * Vollständig übersetzt (UI, Content-Pack, Dokumente): DE, EN, FR,
 * IT, ES, PL, CS, SK, RO. Weitere Sprachen greifen bis zur
 * Fachübersetzung auf den englischen Fallback zurück.
 */

/** Unterstützte Sprachen. */
export type Locale = 'de' | 'en' | 'fr' | 'it' | 'es' | 'pl' | 'cs' | 'sk' | 'ro';

/** Alle unterstützten Sprachen in Anzeigereihenfolge. */
export const LOCALES: readonly Locale[] = ['de', 'en', 'fr', 'it', 'es', 'pl', 'cs', 'sk', 'ro'];

/** Anzeigenamen der Sprachen (Eigenbezeichnung). */
export const LOCALE_NAMES: Readonly<Record<Locale, string>> = {
  de: 'Deutsch',
  en: 'English',
  fr: 'Français',
  it: 'Italiano',
  es: 'Español',
  pl: 'Polski',
  cs: 'Čeština',
  sk: 'Slovenčina',
  ro: 'Română',
};

/**
 * Lokalisierter Text. Deutsch und Englisch sind Pflicht; weitere
 * Sprachen optional — fehlt eine Übersetzung, greift der Fallback
 * auf Englisch (siehe {@link resolveText}).
 */
export interface LText {
  readonly de: string;
  readonly en: string;
  readonly fr?: string;
  readonly it?: string;
  readonly es?: string;
  readonly pl?: string;
  readonly cs?: string;
  readonly sk?: string;
  readonly ro?: string;
}

/** Kurzform zum Anlegen lokalisierter Texte (DE/EN-Basis). */
export function lt(de: string, en: string): LText {
  return { de, en };
}

/** Löst einen lokalisierten Text auf; Fallback: Englisch. */
export function resolveText(text: LText, locale: Locale): string {
  return text[locale] ?? text.en;
}

const LOCALE_KEY = 'ai-act-kompass/locale/v1';

function isLocale(value: string | null): value is Locale {
  return value !== null && (LOCALES as readonly string[]).includes(value);
}

/** Lädt die gespeicherte Sprache (Fallback: Browser-Sprache, sonst Englisch). */
export function loadLocale(): Locale {
  try {
    const stored = localStorage.getItem(LOCALE_KEY);
    if (isLocale(stored)) return stored;
    const nav = navigator.language.slice(0, 2).toLowerCase();
    return isLocale(nav) ? nav : 'en';
  } catch {
    return 'de';
  }
}

/** Persistiert die gewählte Sprache. */
export function saveLocale(locale: Locale): void {
  localStorage.setItem(LOCALE_KEY, locale);
}
