import { notFound } from 'next/navigation'
import { NextIntlClientProvider, hasLocale } from 'next-intl'
import { getMessages, setRequestLocale } from 'next-intl/server'
import { Header } from '@/components/header'
import { Footer } from '@/components/footer'
import { DeferredWhatsApp } from '@/components/deferred-whatsapp'
import { ApiLocaleSync } from '@/components/i18n/api-locale-sync'
import { LocaleHtmlLang } from '@/components/i18n/locale-html-lang'
import { JsonLd } from '@/components/seo/json-ld'
import { routing } from '@/i18n/routing'
import { locales, type Locale } from '@/i18n/config'
import { getStaticSiteSettings } from '@/lib/site-settings'
import {
  buildOrganizationJsonLd,
  buildWebsiteJsonLd,
} from '@/lib/structured-data'

type LocaleLayoutProps = {
  children: React.ReactNode
  params: Promise<{ locale: string }>
}

export function generateStaticParams() {
  return locales.map((locale) => ({ locale }))
}

export default async function LocaleLayout({ children, params }: LocaleLayoutProps) {
  const { locale } = await params

  if (!hasLocale(routing.locales, locale)) {
    notFound()
  }

  setRequestLocale(locale)
  const messages = await getMessages()
  const site = getStaticSiteSettings()
  const resolvedLocale = locale as Locale

  return (
    <NextIntlClientProvider locale={resolvedLocale} messages={messages}>
      <LocaleHtmlLang />
      <ApiLocaleSync />
      <JsonLd
        data={[
          buildOrganizationJsonLd(site),
          buildWebsiteJsonLd(resolvedLocale, site),
        ]}
      />
      <Header />
      {children}
      <Footer />
      <DeferredWhatsApp />
    </NextIntlClientProvider>
  )
}
