"use client";
import { useMediaQuery } from "@/hooks/useMediaQuery";
import { motion, useAnimation } from "motion/react";
import { useEffect } from "react";

type IntroPreloaderProps = {
  isLoaded?: boolean;
};

const IntroPreloader = ({ isLoaded }: IntroPreloaderProps) => {
  const controls = useAnimation();
  const isDesktop = useMediaQuery("(min-width: 768px)", {
    defaultValue: true,
    initializeWithValue: false,
  });
  useEffect(() => {
    if (isLoaded) {
      (async () => {
        ["hideText", "exit", "hideLogo"].forEach((el) =>
          controls.start(el).then(() => el === "hideLogo" && document.documentElement.removeAttribute("style"))
        );
      })();
    }
  }, [isLoaded, controls]);
  return (
    <motion.div
      className="absolute inset-0 w-full h-full scale-200 md:scale-100 z-100000"
      style={{
        transformOrigin: "center center",
        backfaceVisibility: "hidden",
        transformStyle: "flat",
      }}
      variants={{
        initial: { z: 0, y: 0, x: 0 },
        exit: {
          z: "62.5rem",
          y: "0.9375rem",
          x: isDesktop ? "0.625rem" : "-0.25rem",
          transition: { duration: 1.5, ease: [1, -0.01, 0.68, 1] },
        },
      }}
      initial="initial"
      animate={controls}
    >
      <svg className="w-full h-full absolute inset-0" viewBox="0 0 100 100">
        <defs>
          <symbol id="my-logo" viewBox="0 0 10 12">
            <path d="M9.92795 2.00353V0C7.85868 0 6.0325 1.06844 4.96436 2.68602C3.89545 1.06844 2.06926 0 0 0V2.00353C2.18691 2.00353 3.96635 3.79447 3.96947 5.99569C3.96947 5.99725 3.96947 5.99882 3.96947 6.00039C3.96947 6.00196 3.96947 6.00353 3.96947 6.0051C3.96635 8.20553 2.18691 9.99647 0 9.99647V12C2.06926 12 3.89545 10.9316 4.96358 9.31398C6.0325 10.9316 7.85791 12 9.92717 12V9.99647C7.74026 9.99647 5.96082 8.20553 5.9577 6.00431C5.9577 6.00275 5.9577 6.00118 5.9577 5.99961C5.9577 5.99804 5.9577 5.99647 5.9577 5.9949C5.96082 3.79368 7.74104 2.00353 9.92795 2.00353Z" />
          </symbol>

          <mask id="mask-logo" maskUnits="userSpaceOnUse">
            <rect width="100%" height="100%" fill="white" />
            <use
              href="#my-logo"
              x="50"
              y="50"
              width="7"
              height="12"
              fill="black"
              className="-translate-x-[2.5008px] md:-translate-x-[5px] -translate-y-[8px]"
            />
          </mask>
        </defs>

        <rect width="100%" height="100%" className="fill-contigo-violeta" mask="url(#mask-logo)" />

        <g className="translate-x-[52.5%] md:translate-x-1/2 translate-y-1/2">
          <motion.use
            href="#my-logo"
            width="7"
            height="12"
            transform="translate(-5,-8)"
            className="fill-contigo-verde"
            variants={{
              initial: { opacity: 1 },
              hideLogo: { opacity: 0, transition: { duration: 0.5, ease: "easeOut", delay: 1 } },
            }}
          />
          <motion.text
            x="-1"
            y="5"
            textAnchor="middle"
            className="fill-contigo-verde"
            fontSize="1.75"
            variants={{
              initial: { opacity: 1 },
              hideText: { opacity: 0, transition: { duration: 0.5, ease: "easeOut" } },
            }}
          >
            Cargando...
          </motion.text>
        </g>
      </svg>
      <div className="fixed inset-0 bg-[radial-gradient(circle_at_center,_transparent_10vw,_var(--color-contigo-violeta)_10vw)] scale-112" />
    </motion.div>
  );
};

export const PageIntroPreloader = ({ isLoaded }: IntroPreloaderProps) => (
  <div className="fixed w-[100svw] h-[100svh] inset-0 z-[99] flex items-center justify-center pointer-events-none [perspective:62.5rem]">
    <IntroPreloader isLoaded={isLoaded} />
  </div>
);

export default IntroPreloader;
