import { type AppType } from "next/app";
import { type Session } from "next-auth";
import { CssVarsProvider } from "@mui/joy/styles";
import LocalizationProvider from "~/context/localization";
import { SessionProvider } from "next-auth/react";
import { useState, useEffect } from "react";
import { api } from "~/utils/api";
import Head from "next/head";
import Header from "~/components/Header";
import Footer from "~/components/Footer";

const MyApp: AppType<{ session: Session | null }> = ({
  Component,
  pageProps: { session, ...pageProps },
}) => {
  const description = "Simulador de carteira de investimentos";
  const title = "FolioFin";
  const fullName = `${title} - ${description}`;
  const imageMetaURL = "https://foliofin.vercel.app/android-chrome-192x192.png";
  const [mounted, setMounted] = useState(false);
  useEffect(() => {
    setMounted(true);
  }, []);

  return (
    <CssVarsProvider>
      <Head>
        <title>{title}</title>
        <meta name='description' content={description} />
        <link rel='icon' href={imageMetaURL} />
        <meta property='og:title' content={title} />
        <meta property='og:description' content={description} />
        <meta property='og:image' content={imageMetaURL} />
        <meta name='twitter:image' content={imageMetaURL} />
        <meta name='twitter:card' content='summary_large_image' />
        <meta name='theme-color' content='#000000' />

        <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='shortcut icon' href='/favicon.ico?v=2' />
        <meta name='apple-mobile-web-app-title' content={fullName} />
        <meta name='application-name' content={fullName} />
      </Head>
      <SessionProvider session={session}>
        {mounted && (
          <LocalizationProvider>
            <Header />
            <Component {...pageProps} />
            <Footer />
          </LocalizationProvider>
        )}
      </SessionProvider>
    </CssVarsProvider>
  );
};

export default api.withTRPC(MyApp);
