import { ref } from 'vue'

export const useDebouncedCallback = <F extends Function>(callback: F, delay: number) => {
  const timeout = ref<ReturnType<typeof setTimeout>>()
  const debouncedFn = (...args: any[]) => {
    const handler = () => {
      clearTimeout(timeout.value)
      callback(...args)
    }

    clearTimeout(timeout.value)
    timeout.value = setTimeout(handler, delay)
  }

  return debouncedFn()
}
