import NextTopLoader from "nextjs-toploader";
import "./globals.css";
import GlobalProvider from "@/context/Provider";
import { Toaster } from "react-hot-toast";
import { cookies } from "next/headers";
import apis from "@/utils/apis";
import { AuthInterface } from "@/context/interfaces";
import { GoogleOAuthProvider } from "@react-oauth/google";
import Script from "next/script";
import { Provider } from "react-redux";
import store from "@/store/store";
import ReduxProvider from "./reduxProvider";
import { SonnerToaster } from "@/components/ui/sonnerToaster";
import GlobalChatbot from "@/components/globalChatComplaintBot";
import GoogleAnalytics from "@/components/common/GoogleAnalytics";


export async function generateMetadata() {
  let title = "ReadyEats";

  try {
    const configRes = await apis.Auth.configuration();
    const config = configRes?.data?.[0];
    if (config?.product_name) {
      title = config.product_name;
    }
  } catch (error) {
    console.error("Error fetching PWA metadata:", error);
  }

  return {
    title: title,
    icons: {
      icon: "/favicon.ico",
      apple: "/favicon.ico",
    },
    manifest: "/manifest.webmanifest",
    appleWebApp: {
      capable: true,
      statusBarStyle: "default",
      title: title,
    },
  };
}

const rubik = { className: "" };

export default async function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  const cookieStore = cookies();
  const access_token =
    cookieStore.get("COOKIES_USER_ACCESS_TOKEN")?.value ||
    cookieStore.get("cookies_user_access_token")?.value;
  let user_info: AuthInterface | undefined = undefined;

  if (access_token) {
    try {
      apis.setToken(access_token);
      const apiRes = await apis.Profile.getProfile();
      const profileData = apiRes?.data || apiRes;
      if (profileData) {
        user_info = { ...profileData, access_token: access_token };
      }
    } catch (error) {
      console.error("Error fetching user info in SSR:", error);
    }
  }

  return (
    <html
      lang="en"
      className={`${rubik.className}`}
      suppressHydrationWarning={true}
    >
      <Script
        src="https://apis.google.com/js/platform.js?onload=init"
        strategy="afterInteractive"
        async
        defer
      ></Script>
      <Script
        src={`https://maps.googleapis.com/maps/api/js?key=${process.env.NEXT_PUBLIC_GOOGLE_MAP_KEY}&libraries=places`}
        strategy="afterInteractive"
        async
        defer
      />
      <Script
        src="/scripts/flutterNotification.js"
        strategy="beforeInteractive"
        async
        defer
      />

      {/* <Script
        id="google-adsense"
        async
        strategy="afterInteractive"
        src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-6410961539876945"
        crossOrigin="anonymous"
      /> */}

      <body className={"overflow-hidden"}>
        <NextTopLoader showSpinner={false} />
        <GoogleOAuthProvider
          clientId={
            "178859710250-8eg061uoketd98eo6v8mrbg4jrlq99o7.apps.googleusercontent.com"
          }
        >
          <ReduxProvider>
            <GlobalProvider userInfo={user_info}>
              <Toaster position="top-center" />
              <SonnerToaster position="top-right" richColors />
              {children}
              {process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS && (
                <GoogleAnalytics measurementId={process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS} />
              )}
              <GlobalChatbot />
            </GlobalProvider>
          </ReduxProvider>
        </GoogleOAuthProvider>
      </body>
    </html>
  );
}
