import {useState, useEffect} from 'react';

function useDebounce(value: any, delay: number, includeEmpty: boolean = false) {
  const [debouncedValue, setDebouncedValue] = useState(value);

  useEffect(() => {
    // Set a timeout to update debounced value after delay
    const handler = setTimeout(() => {
      setDebouncedValue(value);
    }, delay);

    // Clean up the timeout on unmount or value change
    return () => {
      clearTimeout(handler);
    };
  }, [value, delay]);

  if (includeEmpty || value !== '') {
    return debouncedValue;
  } else {
    return value;
  }
}

export default useDebounce;
