import '@/styles/globals.css'
import { useEffect, useState } from 'react';
import { CircularProgress } from '@mui/material';
import { lock, unlock } from '@/utils/lockScreen';
import Router from "next/router";
import { ClientProvider } from '@/utils/cartProvider';

import { createClient } from '@supabase/supabase-js';
import { SessionContextProvider } from '@supabase/auth-helpers-react';

import Head from 'next/head'
import LogoCard from '../../public/assets/interface/card.svg'

import { useRouter } from 'next/router';
import * as ga from '../lib/ga'

const SUPABASE_KEY = process.env.NEXT_PUBLIC_SUPABASE_KEY

const supabase = createClient(
  "https://gvszhjsqrvbeyobnkdec.supabase.co",
  SUPABASE_KEY
)

export default function App({ Component, pageProps }) {

  const [loading, setLoading] = useState(false)
  const router = useRouter()

  useEffect(() => {
    const handleRouteChange = (url) => {
      ga.pageview(url)
    }
    //When the component is mounted, subscribe to router changes
    //and log those page views
    router.events.on('routeChangeComplete', handleRouteChange)
    // If the component is unmounted, unsubscribe
    // from the event with the `off` method
    return () => {
      router.events.off('routeChangeComplete', handleRouteChange)
    }
  }, [router.events])

  useEffect(() => {
    const start = () => setLoading(true);
    const end = () => setLoading(false);
    Router.events.on("routeChangeStart", start);
    Router.events.on("routeChangeComplete", end);
    Router.events.on("routeChangeError", end);

    if(loading){
      window?.scrollTo({top: 0, left: 0});
      lock()
    } else {
      unlock()
    }

    return () => {
      Router.events.off("routeChangeStart", start);
      Router.events.off("routeChangeComplete", end);
      Router.events.off("routeChangeError", end);
    };
  }, [loading])

  return (
    <>
      <Head>
        <title>Scriptor - 1er organisme de formation dédié à la rédaction de mémoires</title>
        <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
        <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
        <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
        <link rel="manifest" href="/site.webmanifest" />
        <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5" />
        <meta name="msapplication-TileColor" content="#da532c" />
        <meta name="theme-color" content="#ffffff" />
        <meta property="og:image" content={LogoCard.src} />
        <meta property="og:image:type" content="svg" />
        <meta property="og:image:width" content="339" />
        <meta property="og:image:height" content="339" />
      </Head>
      <SessionContextProvider supabaseClient={supabase}>
        <ClientProvider>
          {loading ?
          <div className='absolute flex items-center justify-center z-[100] w-[100vw] h-[100vh] bg-black/80'><CircularProgress /></div>
          : ''}
          <div className='overflow-x-clip'>
            <Component {...pageProps} />
          </div>
        </ClientProvider>
      </SessionContextProvider>
    </>
  )
}
