import { useState, useEffect, useRef } from "react";

const MOBILE_BREAKPOINT = 1024;

/**
 * Inclusive max width where the primary sidebar rail is hidden (`max-md:hidden`)
 * and the slide-out drawer is used. Matches typical Tailwind `md` (48rem): rail
 * shows from 768px upward, so we treat width <= 767 as drawer-only.
 */
export const SIDEBAR_RAIL_COLLAPSE_MAX_WIDTH = 767;

/**
 * Returns true when window width is at or below the breakpoint.
 * Only triggers a re-render when the boolean value changes (i.e., when the
 * width crosses the breakpoint), NOT on every pixel of resize.
 *
 * This replaces useWindowSize() for breakpoint detection, avoiding
 * unnecessary re-renders during drag resize.
 */
export function useBreakpoint(breakpoint: number = MOBILE_BREAKPOINT): boolean {
  const [isMobile, setIsMobile] = useState(
    () => window.innerWidth <= breakpoint,
  );
  const isMobileRef = useRef(isMobile);

  useEffect(() => {
    function handleResize() {
      const newIsMobile = window.innerWidth <= breakpoint;
      if (newIsMobile !== isMobileRef.current) {
        isMobileRef.current = newIsMobile;
        setIsMobile(newIsMobile);
      }
    }

    window.addEventListener("resize", handleResize);
    return () => window.removeEventListener("resize", handleResize);
  }, [breakpoint]);

  return isMobile;
}
