import { useRef, useCallback } from 'react'

export const useDebouncedCallback = <A extends unknown[]>(
  callback: (...args: A) => void,
  delay: number
) => {
  const timeout = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)

  return useCallback(
    (...args: A) => {
      const handler = () => {
        clearTimeout(timeout.current)
        callback(...args)
      }

      clearTimeout(timeout.current)
      timeout.current = setTimeout(handler, delay)
    },
    [callback, delay]
  )
}
