import { useCallback, useRef } from "react";

export const useDebounce = ({
  delayMs,
  instantExecution,
}: {
  delayMs: number;
  instantExecution?: () => void;
}) => {
  const timerRef = useRef<NodeJS.Timeout | null>(null);

  const debounce = useCallback(
    (callback: () => void) => {
      if (timerRef.current) {
        clearTimeout(timerRef.current);
        timerRef.current = null;
      }

      if (instantExecution) {
        instantExecution();
      }
      timerRef.current = setTimeout(callback, delayMs);
    },
    [delayMs, instantExecution],
  );

  return { debounce };
};
