"use client";

import { useEffect } from "react";
import Lenis from "lenis";
import { gsap, ScrollTrigger, prefersReducedMotion } from "@/lib/gsap";

/**
 * Lenis smooth scroll wired into GSAP's ticker so ScrollTrigger stays in sync.
 * Components can pause/resume scrolling (e.g. while a modal is open) by
 * dispatching: window.dispatchEvent(new CustomEvent("dm:lockscroll", { detail: true }))
 */
export default function SmoothScroll() {
  useEffect(() => {
    if (prefersReducedMotion()) return;

    const lenis = new Lenis({
      duration: 1.1,
      easing: (t: number) => Math.min(1, 1.001 - Math.pow(2, -10 * t)),
    });

    lenis.on("scroll", ScrollTrigger.update);
    const raf = (time: number) => lenis.raf(time * 1000);
    gsap.ticker.add(raf);
    gsap.ticker.lagSmoothing(0);

    const onLock = (e: Event) => {
      const locked = (e as CustomEvent<boolean>).detail;
      if (locked) {
        lenis.stop();
        document.body.style.overflow = "hidden";
      } else {
        lenis.start();
        document.body.style.overflow = "";
      }
    };
    window.addEventListener("dm:lockscroll", onLock);

    return () => {
      window.removeEventListener("dm:lockscroll", onLock);
      gsap.ticker.remove(raf);
      lenis.destroy();
    };
  }, []);

  return null;
}