import { Analytics } from '@vercel/analytics/next'
import type { Viewport } from 'next'
import localFont from 'next/font/local'
import { Providers } from '@/components/providers'
import { buildRootMetadata } from '@/lib/metadata'
import { getApiBaseUrl } from '@/lib/api/build-url'
import { fetchSiteSettingsOverlay } from '@/lib/site-settings'
import './globals.css'

// Self-hosted so `next build` does not hit Google Fonts (avoids Retrying 1/3… noise).
const sourceSans = localFont({
  src: [
    {
      path: './fonts/SourceSans3-Variable.woff2',
      weight: '400 700',
      style: 'normal',
    },
    {
      path: './fonts/SourceSans3-Cyrillic-Variable.woff2',
      weight: '400 700',
      style: 'normal',
    },
  ],
  variable: '--font-source-sans',
  display: 'swap',
  adjustFontFallback: 'Arial',
  preload: true,
})

const plusJakarta = localFont({
  src: [
    {
      path: './fonts/PlusJakartaSans-Variable.woff2',
      weight: '500 800',
      style: 'normal',
    },
    {
      path: './fonts/PlusJakartaSans-LatinExt-Variable.woff2',
      weight: '500 800',
      style: 'normal',
    },
  ],
  variable: '--font-plus-jakarta',
  display: 'swap',
  adjustFontFallback: 'Arial',
  preload: true,
  fallback: ['system-ui', 'Segoe UI', 'sans-serif'],
})

function getMediaOrigin(): string | null {
  try {
    const origin = new URL(getApiBaseUrl()).origin
    if (origin.includes('localhost') || origin.includes('127.0.0.1')) return null
    return origin
  } catch {
    return null
  }
}

export async function generateMetadata() {
  return buildRootMetadata()
}

export const viewport: Viewport = {
  colorScheme: 'light',
  themeColor: '#1B2A4A',
}

export default async function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
  const mediaOrigin = getMediaOrigin()
  const initialSiteSettings = await fetchSiteSettingsOverlay()

  return (
    <html lang="en" className={`${sourceSans.variable} ${plusJakarta.variable} light`} suppressHydrationWarning>
      <head>
        {mediaOrigin ? (
          <>
            <link rel="preconnect" href={mediaOrigin} crossOrigin="anonymous" />
            <link rel="dns-prefetch" href={mediaOrigin} />
          </>
        ) : null}
      </head>
      <body className="font-sans antialiased bg-background text-foreground overflow-x-hidden">
        <Providers initialSiteSettings={initialSiteSettings}>
          {children}
        </Providers>
        {process.env.VERCEL ? <Analytics /> : null}
      </body>
    </html>
  )
}
