import { SessionProvider } from "next-auth/react";
import type { AppProps } from "next/app";
import Head from "next/head";
import { usePathname } from "next/navigation";
import { useEffect } from "react";
import { ToastContainer } from "react-toastify";

import "react-toastify/dist/ReactToastify.css";
import "../components/ReactTable/styles.css";
import "./app/custom.css";
import "./app/globals.css";
import "./app/responsivity.css";

import "../src/polyfills";
import "../src/patchNumber";

import PrivateRoute from "@/components/PrivateRoute";
import ContextProvider from "@/src/contexts";
import { checkIsPublicRoute } from "@/utils/check-is-public-route";
import RootLayout from "./app/layout";

function MyApp({ Component, pageProps }: AppProps) {
  const pathname = usePathname();
  const isPublicRoute = checkIsPublicRoute(pathname!);

  useEffect(() => {
    if (pathname !== "") {
      const url = window.location.href;
      const parts = url.split("/");
      const result = parts.slice(3).join("/");
      localStorage.setItem("@pathname", result);
    }
  }, [pathname]);

  return (
    <>
      <Head>
        <title>Sistema Linksun</title>
        <meta name="description" content="Sistema Linksun" />
      </Head>
      <SessionProvider session={pageProps.session}>
        <ContextProvider>
          <RootLayout pathname={pathname}>
            {isPublicRoute ? (
              <Component {...pageProps} />
            ) : (
              <PrivateRoute>
                <Component {...pageProps} />
              </PrivateRoute>
            )}
          </RootLayout>
          <ToastContainer
            className="toastizinho"
            autoClose={2500}
            style={{ zoom: 0.8 }}
          />
        </ContextProvider>
      </SessionProvider>
    </>
  );
}

export default MyApp;
