import { useCallback } from 'react';

/**
 * 防抖 Hook
 *
 * 创建一个防抖函数，延迟执行指定函数直到指定时间后没有新的调用。
 * 适用于搜索输入等场景，避免频繁触发网络请求。
 *
 * @param func - 需要防抖的函数
 * @param delay - 延迟时间（毫秒）
 * @returns 防抖后的函数
 *
 * @example
 * ```tsx
 * const debouncedSearch = useDebounce((keyword: string) => {
 *   setSearchParams(prev => ({ ...prev, keyword }));
 * }, 300);
 * ```
 */
export function useDebounce<T extends (...args: any[]) => void>(
  func: T,
  delay: number
): (...args: Parameters<T>) => void {
  return useCallback((...args: Parameters<T>) => {
    const timeoutId = setTimeout(() => {
      func(...args);
    }, delay);

    // 清理函数会在下一次调用时执行，取消之前的定时器
    return () => clearTimeout(timeoutId);
  }, [func, delay]);
}
