// ============================================================================
// cursor.jsx — minimal custom cursor dot (no hover preview)
// ============================================================================

const { useEffect: useEffectCur, useRef: useRefCur } = React;

function CursorSystem() {
  const xRef = useRefCur(window.innerWidth / 2);
  const yRef = useRefCur(window.innerHeight / 2);
  const dxRef = useRefCur(window.innerWidth / 2);
  const dyRef = useRefCur(window.innerHeight / 2);
  const raf = useRefCur(0);

  useEffectCur(() => {
    const dot = document.getElementById('cursor-dot');
    if (!dot) return;

    const onMove = (e) => {
      xRef.current = e.clientX;
      yRef.current = e.clientY;
      dot.classList.add('ready');
    };
    const onLeave = () => dot.classList.add('hide');
    const onEnter = () => dot.classList.remove('hide');
    const onOver = (e) => {
      const el = e.target.closest && e.target.closest('a, button, [data-cursor-hover]');
      if (el) dot.classList.add('hover'); else dot.classList.remove('hover');
    };

    document.addEventListener('mousemove', onMove);
    document.addEventListener('mouseleave', onLeave);
    document.addEventListener('mouseenter', onEnter);
    document.addEventListener('mouseover', onOver);

    const tick = () => {
      dxRef.current += (xRef.current - dxRef.current) * 0.35;
      dyRef.current += (yRef.current - dyRef.current) * 0.35;
      dot.style.transform = `translate(${dxRef.current}px, ${dyRef.current}px) translate(-50%, -50%)`;
      raf.current = requestAnimationFrame(tick);
    };
    raf.current = requestAnimationFrame(tick);

    return () => {
      cancelAnimationFrame(raf.current);
      document.removeEventListener('mousemove', onMove);
      document.removeEventListener('mouseleave', onLeave);
      document.removeEventListener('mouseenter', onEnter);
      document.removeEventListener('mouseover', onOver);
    };
  }, []);

  return null;
}

Object.assign(window, { CursorSystem });
