import type { Metadata, Viewport } from 'next'
import { Nunito_Sans, Oswald } from 'next/font/google'
import Script from 'next/script'
import BackToTop from '@/components/BackToTop'
import Footer from '@/components/Footer'
import Header from '@/components/Header'
import ScrollProgress from '@/components/ScrollProgress'
import { site } from '@/lib/site'
import './globals.css'

// Az eredeti oldal a Google Fonts CDN-jéről töltötte ezeket (render-blokkoló).
// Itt build időben letöltve, a saját doménről, automatikus preloaddal.
const nunito = Nunito_Sans({
  subsets: ['latin-ext'],
  weight: ['200', '300', '400', '700', '900'],
  variable: '--font-nunito',
  display: 'swap',
})

const oswald = Oswald({
  subsets: ['latin-ext'],
  weight: ['400', '700'],
  variable: '--font-oswald',
  display: 'swap',
})

export const metadata: Metadata = {
  metadataBase: new URL(site.url),
  title: {
    default: site.title,
    template: `%s | ${site.title}`,
  },
  description: site.description,
  applicationName: site.title,
  authors: [{ name: 'Böszörményi Kovács Zsolt', url: site.url }],
  creator: 'Böszörményi Kovács Zsolt',
  keywords: [
    'esküvői ceremóniamester',
    'szertartásvezető',
    'angol nyelvű ceremóniamester',
    'kétnyelvű esküvő',
    'Hajdúböszörmény',
    'Debrecen',
    'esküvő',
    'kongashow',
  ],
  openGraph: {
    title: site.title,
    description: site.description,
    url: site.url,
    siteName: site.title,
    // az oldal egésze weboldal, nem egyetlen cikk
    type: 'website',
    images: [{ url: site.ogImage, width: 1200, height: 630, alt: site.title }],
    locale: 'hu_HU',
  },
  twitter: {
    card: 'summary_large_image',
    title: site.title,
    description: site.description,
    images: [site.ogImage],
  },
  alternates: { canonical: '/' },
  // teszt aldoménen a keresők ne indexeljenek
  ...(site.noindex ? { robots: { index: false, follow: false } } : null),
}

/**
 * Strukturált adat a kereséshez: helyi szolgáltató, elérhetőséggel.
 * Ettől jelenhet meg a Google találatban a telefonszám és a terület.
 */
const jsonLd = {
  '@context': 'https://schema.org',
  '@type': 'LocalBusiness',
  '@id': `${site.url}/#business`,
  name: 'Böszörményi Kovács Zsolt — esküvői ceremóniamester',
  description: site.description,
  url: site.url,
  image: `${site.url}${site.ogImage}`,
  telephone: site.phone,
  email: site.email,
  priceRange: '$$',
  address: {
    '@type': 'PostalAddress',
    addressLocality: site.city,
    addressCountry: 'HU',
  },
  areaServed: { '@type': 'Country', name: 'Magyarország' },
  knowsLanguage: ['hu', 'en'],
  sameAs: [site.facebook, site.facebookPage],
}

export const viewport: Viewport = {
  width: 'device-width',
  initialScale: 1,
  themeColor: '#222831',
}

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="hu" className={`${nunito.variable} ${oswald.variable}`}>
      <body>
        <script
          type="application/ld+json"
          // a tartalom saját, konstans adat — nem felhasználói bemenet
          dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
        />
        <ScrollProgress />
        <Header />
        <main>{children}</main>
        <Footer />
        <BackToTop />

        {/* Google Analytics — csak azután tölt be, hogy az oldal interaktív lett.
            Teszt aldoménen kimarad, hogy ne szennyezze az éles statisztikát. */}
        {!site.noindex && (
          <>
            <Script
              src={`https://www.googletagmanager.com/gtag/js?id=${site.gaId}`}
              strategy="afterInteractive"
            />
            <Script id="ga-init" strategy="afterInteractive">
              {`window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${site.gaId}');`}
            </Script>
          </>
        )}
      </body>
    </html>
  )
}
