import type { Metadata } from 'next'
import { Inter } from 'next/font/google'
import Script from 'next/script'
import '../globals.css'
import { GoogleOAuthWrapper } from '../GoogleOAuthWrapper'
import { PaddleProvider } from '../PaddleProvider'
import { NextIntlClientProvider } from 'next-intl'
import { getMessages } from 'next-intl/server'
import { routing } from '@/i18n/routing'
import CookieConsentBanner from '@/components/CookieConsentBanner'
import GoogleAnalyticsConsent from '@/components/GoogleAnalyticsConsent'

const inter = Inter({ subsets: ['latin'], variable: '--font-sans' })

const BASE_URL = process.env.NEXT_PUBLIC_APP_URL ?? 'https://cahootravel.com'

export async function generateMetadata({
  params,
}: {
  params: Promise<{ locale: string }>
}): Promise<Metadata> {
  const { locale } = await params

  const languages: Record<string, string> = {}
  for (const loc of routing.locales) {
    languages[loc] = `/${loc}`
  }

  return {
    metadataBase: new URL(BASE_URL),
    title: {
      template: '%s | CahooTravel',
      default: 'CahooTravel — Find Hidden Hotel Price Gaps & Save',
    },
    description:
      'Compare hotel prices from 100+ countries. Reveal geo-pricing gaps on Booking.com, Airbnb, Expedia and more — and book at the cheapest rate. Free to start.',
    icons: { icon: '/favicon.svg' },
    openGraph: {
      type: 'website',
      siteName: 'CahooTravel',
      title: 'CahooTravel — Find Hidden Hotel Price Gaps & Save',
      description:
        'Compare hotel prices from 100+ countries. Reveal geo-pricing gaps on Booking.com, Airbnb, Expedia and more — and book at the cheapest rate.',
      images: [
        {
          url: `${BASE_URL}/api/og`,
          width: 1200,
          height: 630,
          alt: 'CahooTravel — The smartest way to book your next adventure.',
        },
      ],
      locale,
    },
    twitter: {
      card: 'summary_large_image',
      title: 'CahooTravel — Find Hidden Hotel Price Gaps & Save',
      description:
        'Compare hotel prices from 100+ countries. Reveal geo-pricing gaps on Booking.com, Airbnb, Expedia and more — and book at the cheapest rate.',
      images: [`${BASE_URL}/api/og`],
    },
    alternates: {
      languages,
    },
  }
}

const organizationSchema = {
  '@context': 'https://schema.org',
  '@type': 'Organization',
  name: 'CahooTravel',
  url: BASE_URL,
  logo: `${BASE_URL}/cahootravel-logo.svg`,
  sameAs: [
    'https://www.instagram.com/cahootravel.co',
    'https://www.tiktok.com/@cahootravel.co',
  ],
  contactPoint: {
    '@type': 'ContactPoint',
    contactType: 'customer support',
    email: 'support@cahootravel.com',
  },
}

export default async function LocaleLayout({
  children,
  params,
}: {
  children: React.ReactNode
  params: Promise<{ locale: string }>
}) {
  const { locale } = await params
  const messages = await getMessages()

  return (
    <html lang={locale}>
      <body className={`${inter.variable} font-sans antialiased`}>
        <NextIntlClientProvider messages={messages}>
          <GoogleOAuthWrapper>
            <PaddleProvider>{children}</PaddleProvider>
          </GoogleOAuthWrapper>
          <CookieConsentBanner />
          <GoogleAnalyticsConsent />
        </NextIntlClientProvider>
        <Script
          src="https://www.googletagmanager.com/gtag/js?id=G-5GNKKJ7HE2"
          strategy="afterInteractive"
        />
        <Script id="google-analytics" strategy="afterInteractive">
          {`
            window.dataLayer = window.dataLayer || [];
            function gtag(){dataLayer.push(arguments);}
            gtag('consent', 'default', {
              analytics_storage: 'denied',
              ad_storage: 'denied',
              wait_for_update: 500,
            });
            gtag('js', new Date());
            gtag('config', 'G-5GNKKJ7HE2');
          `}
        </Script>
        <script
          type="application/ld+json"
          dangerouslySetInnerHTML={{ __html: JSON.stringify(organizationSchema) }}
        />
      </body>
    </html>
  )
}
