import type { Metadata } from 'next';
import { NextIntlClientProvider, hasLocale } from 'next-intl';
import { setRequestLocale } from 'next-intl/server';
import { Roboto, Roboto_Slab } from 'next/font/google';
import { notFound } from 'next/navigation';

import BackToTop from '@/components/BackToTop';
import ScrollRestorer from '@/components/ScrollRestorer';
import CookieModal from '@/components/cookies/CookieModal';
import VideoConsentObserver from '@/components/cookies/VideoConsentObserver';
import Footer from '@/components/footer/Footer';
import Header from '@/components/header/Header';
import { Toaster } from '@/components/ui/toaster';
import { getSEOConfig } from '@/utils/seo';

import '@/app/globals.css';
import { AuthProvider } from '@/contexts/AuthContext';
import { routing } from '@/i18n/routing';

const robotoSlab = Roboto_Slab({
  variable: '--font-roboto-slab',
  subsets: ['latin'],
});

const roboto = Roboto({
  variable: '--font-roboto',
  subsets: ['latin'],
});

const seoConfig = getSEOConfig();

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

export const metadata: Metadata = {
  // todo add local to base if en???
  metadataBase: new URL('https://azopus.hu'),
  title: {
    default: 'A-Z OPUS művészeti életút-adatbázis',
    template: '%s | A-Z OPUS művészeti életút-adatbázis',
  },
  description: 'Kortárs magyar összművészeti adatbázis. Művészek, alkotások, kulturális események.',
  keywords: [
    'magyar művészeti akadémia',
    'kortárs művészet',
    'mma művészek',
    'magyar művészeti akadémia művészek',
    'magyar művészet',
    'kortárs művészek',
    'kulturális események',
    'művészeti életút',
    'alkotások',
    'művészeti adatbázis',
    'az opus',
    'opus adatbázis',
    'opus művészeti adatbázis',
    'opus művészeti életút-adatbázis',
  ],
  authors: [{ name: 'A-Z OPUS' }],
  creator: 'A-Z OPUS',
  publisher: 'A-Z OPUS',

  // conditional robots meta tags
  robots: seoConfig.shouldIndex
    ? {
        index: true,
        follow: true,
      }
    : {
        index: false,
        follow: false,
      },
  openGraph: {
    type: 'website',
    locale: 'hu_HU',
    url: 'https://azopus.hu',
    siteName: 'A-Z OPUS',
    title: 'A-Z OPUS művészeti életút-adatbázis',
    description:
      'Kortárs magyar összművészeti adatbázis. Művészek, alkotások, kulturális események.',
  },
  // images: [
  //   {
  //     url: "/og-image.jpg",
  //     width: 1200,
  //     height: 630,
  //     alt: "A-Z OPUS művészeti adatbázis",
  //   },
  // ],
};

export default async function LocaleLayout({
  children,
  params,
}: Readonly<{
  children: React.ReactNode;
  params: Promise<{ locale: string }>;
}>) {
  const { locale } = await params;
  if (!hasLocale(routing.locales, locale)) {
    notFound();
  }

  setRequestLocale(locale);

  return (
    <html lang={locale} className={`${robotoSlab.variable} ${roboto.variable}`}>
      <body className={`${robotoSlab.variable} ${roboto.variable} antialiased`}>
        <NextIntlClientProvider>
          <AuthProvider>
            <div className="relative w-full min-h-screen flex flex-col pt-[60px] md:pt-[68px] lg:pt-[76px]">
              <Header />
              <main className="flex-1">{children}</main>
              <Footer />
            </div>

            <VideoConsentObserver />
            <CookieModal />
            <BackToTop />
            <ScrollRestorer />
            <Toaster />
          </AuthProvider>
        </NextIntlClientProvider>
      </body>
    </html>
  );
}
