import type { Metadata } from "next";
import { DM_Sans, Playfair_Display } from "next/font/google";
import { NextIntlClientProvider } from "next-intl";
import { getMessages, setRequestLocale } from "next-intl/server";
import { notFound } from "next/navigation";
import { routing } from "@/i18n/routing";
import { SITE_URL, localeAlternates } from "@/lib/seo";
import { organizationJsonLd } from "@/lib/jsonld";
import { JsonLd } from "@/components/seo/json-ld";
import "../globals.css";

const dmSans = DM_Sans({
  variable: "--font-dm-sans",
  subsets: ["latin"],
  weight: ["300", "400", "500", "600", "700"],
});

const playfair = Playfair_Display({
  variable: "--font-playfair",
  subsets: ["latin"],
  weight: ["400", "500", "600", "700", "800", "900"],
});

export async function generateMetadata({
  params,
}: {
  params: Promise<{ locale: string }>;
}): Promise<Metadata> {
  const { locale } = await params;
  const titles: Record<string, string> = {
    en: "Edible Bird's Nest Exporter Indonesia | Original Nest",
    id: "Eksportir Sarang Burung Walet Indonesia | Original Nest",
    zh: "印尼优质燕窝出口商 | Original Nest",
  };
  const descs: Record<string, string> = {
    en: "Indonesia's leading producer and exporter of premium, HACCP-certified edible bird's nests. Pure, handpicked, chemical-free, globally export-ready.",
    id: "Produsen dan eksportir sarang burung walet premium Indonesia yang bersertifikat HACCP. Murni, dipetik tangan, bebas bahan kimia, siap ekspor global.",
    zh: "印度尼西亚领先的优质可食用燕窝生产商和出口商，经HACCP认证，纯净、手工采摘、无化学物质，随时满足全球出口需求。",
  };
  return {
    metadataBase: new URL(SITE_URL),
    alternates: localeAlternates(locale),
    title: titles[locale] ?? titles.en,
    description: descs[locale] ?? descs.en,
    openGraph: {
      title: titles[locale] ?? titles.en,
      description: descs[locale] ?? descs.en,
      type: "website",
      images: [
        {
          url: "/images/bg-hero.png",
          width: 1200,
          height: 630,
          alt: titles[locale] ?? titles.en,
        },
      ],
    },
    twitter: {
      card: "summary_large_image",
      title: titles[locale] ?? titles.en,
      description: descs[locale] ?? descs.en,
      images: ["/images/bg-hero.png"],
    },
  };
}

export function generateStaticParams() {
  return routing.locales.map((locale) => ({ locale }));
}

export default async function LocaleLayout({
  children,
  params,
}: {
  children: React.ReactNode;
  params: Promise<{ locale: string }>;
}) {
  const { locale } = await params;

  if (!routing.locales.includes(locale as "en" | "id" | "zh")) {
    notFound();
  }

  setRequestLocale(locale);

  const messages = await getMessages();

  return (
    <html
      lang={locale}
      className={`${dmSans.variable} ${playfair.variable} scroll-smooth`}
    >
      <body className="min-h-screen font-sans antialiased">
        <JsonLd data={organizationJsonLd()} />
        <NextIntlClientProvider messages={messages}>
          {children}
        </NextIntlClientProvider>
      </body>
    </html>
  );
}
