import Head from 'next/head';
import { FC, useEffect, useState } from 'react';
import HeaderComponent from '@/components/header';
import FooterComponent from '@/components/footer';
import styles from './layout.module.scss';
import { useRouter } from 'next/router';
import { NEXT_PUBLIC_API_URL } from '@/lib/constants';
import { get } from '@/lib/fetch';

interface SeoGoogleTags {
  pageTitle?: string;
  title?: string;
  description?: string;
}

interface SeoFacebookTags {
  type?: string;
  url?: string;
  title?: string;
  description?: string;
  image?: Record<string, any>;
}

interface Layout {
  type?: 'one' | 'two';
  seoGoogleTags?: SeoGoogleTags;
  seoFacebookTags?: SeoFacebookTags;
  seoTwitterTags?: SeoFacebookTags;
}

const MousePointer = () => {
  return (
    <div className="mouse-pointer">
      <div className="inner"></div>
    </div>
  )
}

const LayoutComponent: FC<Layout> = ({ type, children, seoGoogleTags, seoFacebookTags, seoTwitterTags }) => {
  const { pathname } = useRouter();
  const [socialLinks, setSocialLinks] = useState([]);

  useEffect(() => {
    const initialValues = async () => {
      // const response = await get('social');
      const response = await get('acf/v3/options/options');

      if (response && !response?.error) {
        const { data } = response;
        setSocialLinks(data?.acf?.socialLinks);
      }

      const header = document.querySelector('.header');
      const footer = document.querySelector('.footer');
  
      if (pathname.includes('work')) {
        header.querySelector('.header-menu').remove();
        header.querySelector('.header-mobile-menu')?.remove();
      }
      header.classList.add('show');
      footer.classList.add('show');
    };

    initialValues();
  }, []);

  useEffect(() => {
    const mousePointer = document.querySelector('.mouse-pointer') as HTMLElement;

    document.body.addEventListener('mousemove', (event) => {
      const x = event.clientX;
      const y = event.clientY;

      mousePointer.style.left = `${x - 17}px`;
      mousePointer.style.top = `${y - 17}px`;
    });
  }, []);

  return (
    <>
      <Head>
        <link rel="shortcut icon" href="/favicon.ico?v=1" />
        {seoGoogleTags && <>
          {seoGoogleTags?.pageTitle && <title>{seoGoogleTags?.pageTitle}</title>}
          {seoGoogleTags?.title && <meta name="title" content={seoGoogleTags?.title}></meta>}
          {seoGoogleTags?.description && <meta name="description" content={seoGoogleTags?.description}></meta>}
        </>}
        {seoFacebookTags && <>
          {/* {seoFacebookTags?.type && <meta property="og:type" content={seoFacebookTags?.type}></meta>} */}
          {seoFacebookTags?.type && <meta property="og:type" content="article"></meta>}
          {/* {seoFacebookTags?.url && <meta property="og:url" content={seoFacebookTags?.url}></meta>} */}
          {seoFacebookTags?.title && <meta property="og:title" content={seoFacebookTags?.title}></meta>}
          {seoFacebookTags?.description && <meta property="og:description" content={seoFacebookTags?.description}></meta>}
          {seoFacebookTags?.image && <meta property="og:image" content={`${seoFacebookTags?.image.url}`}></meta>}
        </>}
        {seoTwitterTags && <>
          <meta property="twitter:card" content="summary_large_image"></meta>
          {/* {seoTwitterTags?.url && <meta property="twitter:url" content={seoTwitterTags?.url}></meta>} */}
          {seoTwitterTags?.title && <meta property="twitter:title" content={seoTwitterTags?.title}></meta>}
          {seoTwitterTags?.description && <meta property="twitter:description" content={seoTwitterTags?.description}></meta>}
          {seoTwitterTags?.image && <meta property="twitter:image" content={`${seoTwitterTags?.image.url}`}></meta>}
        </>}
      </Head>
      <HeaderComponent type={type} socialLinks={socialLinks}/>
        <main className={styles.main}>
          {children}
        </main>
        <MousePointer />
      <FooterComponent type={type} socialLinks={socialLinks}/>
    </>
  );
};

export default LayoutComponent;