// ============================================================
// 共享工具函数 —— 主进程 & 渲染进程通用（纯函数，不依赖平台 API）
// ============================================================

/**
 * 简单防抖函数
 * @param fn 目标函数
 * @param delay 延迟毫秒数
 */
export function debounce<T extends (...args: unknown[]) => void>(
   fn: T,
   delay: number,
): (...args: Parameters<T>) => void {
   let timer: ReturnType<typeof setTimeout> | null = null;
   return (...args: Parameters<T>) => {
      if (timer !== null) {
         clearTimeout(timer);
      }
      timer = setTimeout(() => {
         fn(...args);
         timer = null;
      }, delay);
   };
}

/**
 * 节流函数
 * @param fn 目标函数
 * @param interval 间隔毫秒数
 */
export function throttle<T extends (...args: unknown[]) => void>(
   fn: T,
   interval: number,
): (...args: Parameters<T>) => void {
   let lastTime = 0;
   return (...args: Parameters<T>) => {
      const now = Date.now();
      if (now - lastTime >= interval) {
         lastTime = now;
         fn(...args);
      }
   };
}

/**
 * 语义化版本号比较
 * @returns 1 (v1 > v2), -1 (v1 < v2), 0 (相等)
 */
export function compareVersions(v1: string, v2: string): number {
   const parts1 = v1.split('.').map(Number);
   const parts2 = v2.split('.').map(Number);
   const maxLen = Math.max(parts1.length, parts2.length);

   for (let i = 0; i < maxLen; i++) {
      const a = parts1[i] || 0;
      const b = parts2[i] || 0;
      if (a > b) return 1;
      if (a < b) return -1;
   }
   return 0;
}

/**
 * 深拷贝（JSON 安全类型）
 */
export function deepClone<T>(obj: T): T {
   return JSON.parse(JSON.stringify(obj));
}

/**
 * 生成唯一 ID（简易版，不依赖 crypto）
 */
export function generateId(): string {
   return `${Date.now().toString(36)}-${Math.random().toString(36).substring(2, 9)}`;
}
