import { ref, unref } from 'vue'

// eslint-disable-next-line no-unused-vars
export function useLockFn<P extends any[] = any[], V = any>(fn: (...args: P) => Promise<V>) {
  const lockRef = ref(false)
  return async function (...args: P) {
    if (unref(lockRef)) {
      return
    }
    lockRef.value = true
    try {
      const ret = await fn(...args)
      lockRef.value = false
      return ret
    } catch (e) {
      lockRef.value = false
      throw e
    }
  }
}
