/**
 * 定时器管理工具类
 * 提供定时器的统一管理
 */
export class TimerUtils {
  /**
   * 安全清除定时器
   * @param {number|null} timerId - 定时器ID
   * @param {string} type - 定时器类型 'timeout' | 'interval'
   * @returns {null} 返回null便于重置变量
   */
  static safeClear(
    timerId: ReturnType<typeof setTimeout> | ReturnType<typeof setInterval> | null,
    type: "timeout" | "interval" = "timeout",
  ): null {
    if (timerId) {
      if (type === "interval") {
        clearInterval(timerId);
      } else {
        clearTimeout(timerId);
      }
    }
    return null;
  }

  /**
   * 清除定时器（别名方法）
   * @param {number|null} timerId - 定时器ID
   * @param {string} type - 定时器类型 'timeout' | 'interval'
   * @returns {null} 返回null便于重置变量
   */
  static clearTimer(
    timerId: ReturnType<typeof setTimeout> | ReturnType<typeof setInterval> | null,
    type: "timeout" | "interval" = "timeout",
  ): null {
    return this.safeClear(timerId, type);
  }

  /**
   * 创建可取消的延时执行
   * @param {Function} callback - 回调函数
   * @param {number} delay - 延时时间
   * @returns {Object} 包含cancel方法的对象
   */
  static createCancelableTimeout(callback: () => void, delay: number) {
    let timerId: ReturnType<typeof setTimeout> | null = setTimeout(callback, delay);
    return {
      cancel() {
        if (timerId) {
          clearTimeout(timerId);
          timerId = null;
        }
      },
      isActive() {
        return timerId !== null;
      },
    };
  }

  /**
   * 创建可取消的定时执行
   * @param {Function} callback - 回调函数
   * @param {number} interval - 间隔时间
   * @returns {Object} 包含cancel方法的对象
   */
  static createCancelableInterval(callback: () => void, interval: number) {
    let timerId: ReturnType<typeof setInterval> | null = setInterval(callback, interval);
    return {
      cancel() {
        if (timerId) {
          clearInterval(timerId);
          timerId = null;
        }
      },
      isActive() {
        return timerId !== null;
      },
    };
  }
}
