import { NextIntlClientProvider } from "next-intl";
import { setRequestLocale } from "next-intl/server";
import React from "react";
import { notFound } from "next/navigation";
import ConsentBanner from "../components/ConsentBanner";

// Supported locales - must match middleware.ts
const SUPPORTED_LOCALES = ["en", "de"] as const;
type SupportedLocale = (typeof SUPPORTED_LOCALES)[number];

function isValidLocale(locale: string): locale is SupportedLocale {
  return SUPPORTED_LOCALES.includes(locale as SupportedLocale);
}

async function loadEnhancedMessages(locale: SupportedLocale) {
  // Lade basis JSON Messages
  const baseMessages = (await import(`../../messages/${locale}.json`)).default;
  
  // Erweitere mit Directus (wenn verfügbar)
  // Für jetzt: return base messages, Directus wird per Server Component geladen
  return baseMessages;
}

// Define valid static params to prevent malicious path traversal
export function generateStaticParams() {
  return SUPPORTED_LOCALES.map((locale) => ({ locale }));
}

export default async function LocaleLayout({
  children,
  params,
}: {
  children: React.ReactNode;
  params: Promise<{ locale: string }>;
}) {
  const { locale } = await params;
  
  // Security: Validate locale to prevent malicious imports
  if (!isValidLocale(locale)) {
    notFound();
  }
  
  // Ensure next-intl actually uses the route segment locale for this request.
  setRequestLocale(locale);
  // Load messages explicitly by route locale to avoid falling back to the wrong
  // language when request-level locale detection is unavailable/misconfigured.
  const messages = await loadEnhancedMessages(locale);

  return (
    <NextIntlClientProvider locale={locale} messages={messages}>
      {children}
      <ConsentBanner />
    </NextIntlClientProvider>
  );
}

