import { useSyncExternalStore } from 'react';

const MOBILE_BREAKPOINT = 768;

const mql =
  typeof window === 'undefined'
    ? undefined
    : window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);

function mediaQueryListener(callback: (event: MediaQueryListEvent) => void) {
  if (!mql) {
    return () => {};
  }

  mql.addEventListener('change', callback);

  return () => {
    mql.removeEventListener('change', callback);
  };
}

function isSmallerThanBreakpoint(): boolean {
  return mql?.matches ?? false;
}

function getServerSnapshot(): boolean {
  return false;
}

export function useIsMobile(): boolean {
  return useSyncExternalStore(
    mediaQueryListener,
    isSmallerThanBreakpoint,
    getServerSnapshot,
  );
}
