// scroll-lock.jsx — shared body scroll-lock with reference counting
// Multiple consumers (modal + mega-menu + lightbox) can request a lock;
// body overflow is restored only when ALL consumers release.
// Cleanup runs on unmount, so a component disappearing mid-lock
// (route change, hot reload, parent re-render) won't leave the page frozen.

(function () {
  let count = 0;
  let prevOverflow = '';
  let prevPaddingRight = '';

  function acquire() {
    if (count === 0) {
      prevOverflow = document.body.style.overflow;
      prevPaddingRight = document.body.style.paddingRight;
      // Compensate for the scrollbar disappearing so layout doesn't jump
      const sbw = window.innerWidth - document.documentElement.clientWidth;
      if (sbw > 0) document.body.style.paddingRight = `${sbw}px`;
      document.body.style.overflow = 'hidden';
    }
    count += 1;
  }

  function release() {
    if (count === 0) return;
    count -= 1;
    if (count === 0) {
      document.body.style.overflow = prevOverflow;
      document.body.style.paddingRight = prevPaddingRight;
    }
  }

  // React hook: lock while `active` is true; always release on unmount
  function useScrollLock(active) {
    React.useEffect(() => {
      if (!active) return;
      acquire();
      return release;
    }, [active]);
  }

  window.useScrollLock = useScrollLock;
})();
