import type { Metadata } from "next";
import type { ReactNode } from "react";
import { Space_Grotesk, Inter, IBM_Plex_Mono } from "next/font/google";
import { site } from "@/data/site";
import { ThemeProvider } from "@/components/layout/ThemeProvider";
import { Header } from "@/components/layout/Header";
import { Footer } from "@/components/layout/Footer";
import { ScrollTop } from "@/components/layout/ScrollTop";
import "./globals.css";

const spaceGrotesk = Space_Grotesk({
  subsets: ["latin"],
  weight: ["500", "600", "700"],
  variable: "--font-display",
  display: "swap",
});

const inter = Inter({
  subsets: ["latin"],
  weight: ["400", "500", "600"],
  variable: "--font-body",
  display: "swap",
});

const plexMono = IBM_Plex_Mono({
  subsets: ["latin"],
  weight: ["400", "500"],
  variable: "--font-mono",
  display: "swap",
});

export const metadata: Metadata = {
  metadataBase: new URL("https://techthrive.com.ng"),
  title: `${site.name} — ${site.role}`,
  description: site.metaDescription,
  keywords: [
    "web developer Port Harcourt",
    "Nigeria web developer",
    "Chike Emodi",
    "TechThrive",
    "website development Nigeria",
  ],
  openGraph: {
    title: `${site.name} — ${site.role}`,
    description: site.metaDescription,
    type: "website",
    locale: "en_NG",
    siteName: site.brand,
  },
  twitter: {
    card: "summary",
    title: `${site.name} — ${site.role}`,
    description: site.metaDescription,
  },
  icons: {
    icon: "/favicon.png",
    apple: "/apple-touch-icon.png",
  },
};

// Runs before hydration to apply the correct theme immediately and avoid a flash.
const themeInitScript = `
(function () {
  try {
    var stored = localStorage.getItem('techthrive-theme');
    var theme = stored === 'light' || stored === 'dark'
      ? stored
      : (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
    if (theme === 'dark') document.documentElement.classList.add('dark');
  } catch (e) {}
})();
`;

export default function RootLayout({ children }: { children: ReactNode }) {
  return (
    <html lang="en" suppressHydrationWarning>
      <head>
        <script dangerouslySetInnerHTML={{ __html: themeInitScript }} />
      </head>
      <body
        className={`${spaceGrotesk.variable} ${inter.variable} ${plexMono.variable} font-body`}
      >
        <ThemeProvider>
          <Header />
          <main>{children}</main>
          <Footer />
          <ScrollTop />
        </ThemeProvider>
      </body>
    </html>
  );
}
