import type { Metadata } from "next";
import { Geist, Geist_Mono, Lexend, Lexend_Deca } from "next/font/google";
import { getServerSession } from "next-auth";
import { NuqsAdapter } from "nuqs/adapters/next/app";
import "./globals.css";
import { authOptions } from "@/lib/auth";
import { AppShell } from "@/components/app-shell";
import { AbilityProvider } from "@/components/providers/ability-provider";
import { StoreProvider } from "@/components/providers/store-provider";
import { SessionProvider } from "@/components/providers/session-provider";
import { BackgroundPrefetcher } from "@/components/providers/background-prefetcher";
import { ProfileCacheSync } from "@/components/providers/profile-cache-sync";
import { DashboardStatsCacheSync } from "@/components/providers/dashboard-stats-cache-sync";
import { ThemeToasterProvider } from "@/components/providers/theme-toaster-provider";
import { ClientGeoProvider } from "@/components/providers/client-geo-provider";
import { QueryProvider } from "@/components/providers/query-provider";
import Script from "next/script";

const geistSans = Geist({
  variable: "--font-geist-sans",
  subsets: ["latin"],
});

const geistMono = Geist_Mono({
  variable: "--font-geist-mono",
  subsets: ["latin"],
});

const lexend = Lexend({
  variable: "--font-lexend",
  subsets: ["latin"],
});

const lexendDeca = Lexend_Deca({
  variable: "--font-lexend-deca",
  subsets: ["latin"],
});

export const metadata: Metadata = {
  title: "HubSpot CRM",
  description: "HubSpot CRM",
  robots: {
    index: false,
    follow: false,
  },
};


export default async function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  const session = await getServerSession(authOptions);

  return (
    <html lang="en" suppressHydrationWarning>
      <body
        suppressHydrationWarning
        className={`${geistSans.variable} ${geistMono.variable} ${lexend.variable} ${lexendDeca.variable} antialiased`}
      >
        {process.env.NODE_ENV === "development" && (
          <Script
            src="//unpkg.com/react-grab/dist/index.global.js"
            crossOrigin="anonymous"
            strategy="beforeInteractive"
          />
        )}

        <ThemeToasterProvider>
          <ClientGeoProvider />
          <StoreProvider>
            <QueryProvider>
              <NuqsAdapter>
                <SessionProvider session={session}>
                  <AbilityProvider>
                    <ProfileCacheSync />
                    <DashboardStatsCacheSync />
                    <BackgroundPrefetcher />
                    <AppShell>{children}</AppShell>
                  </AbilityProvider>
                </SessionProvider>
              </NuqsAdapter>
            </QueryProvider>
          </StoreProvider>
        </ThemeToasterProvider>
      </body>
    </html>
  );
}
