import { useEffect } from 'react'
import type { AppProps } from 'next/app'
import Head from 'next/head'
import { ToastContainer, Zoom } from 'react-toastify'
import 'react-toastify/dist/ReactToastify.min.css'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import detectEthereumProvider from '@metamask/detect-provider'

import '../styles/globals.css'
import Layout from 'components/Layout'
import useWalletStore from 'stores/useWalletStore'

async function isMetamaskInstalled(): Promise<boolean> {
  const provider = await detectEthereumProvider()

  return !!provider
}

const queryClient = new QueryClient()

function MyApp({ Component, pageProps }: AppProps) {
  const address = useWalletStore((s) => s.address)
  const actions = useWalletStore((s) => s.actions)

  // init store
  useEffect(() => {
    const verifyMetamask = async () => {
      actions.setMetamaskInstalledStatus(await isMetamaskInstalled())
    }

    actions.initialize()

    verifyMetamask()
  }, [actions])

  return (
    <>
      <Head>
        <title>Mars V2</title>
        {/* <meta name="description" content="Generated by create next app" /> */}
        <link rel="icon" href="/favicon.svg" />
      </Head>
      <QueryClientProvider client={queryClient}>
        <Layout>{address ? <Component {...pageProps} /> : <div>No wallet connected</div>}</Layout>
        <ToastContainer
          autoClose={1500}
          closeButton={false}
          position="bottom-right"
          hideProgressBar
          newestOnTop
          transition={Zoom}
        />
      </QueryClientProvider>
    </>
  )
}

export default MyApp