/**
 * 回调函数安全调用工具类
 * 提供安全的回调函数调用机制
 */
export class CallbackUtils {
  /**
   * 安全调用回调函数
   * @param {Object} callbacks - 回调函数对象
   * @param {string} callbackName - 回调函数名称
   * @param {...any} args - 传递给回调函数的参数
   */
  static safeCall(
    callbacks: Record<string, (...args: any[]) => void> | null | undefined,
    callbackName: string,
    ...args: any[]
  ): void {
    if (callbacks && typeof callbacks[callbackName] === "function") {
      try {
        callbacks[callbackName](...args);
      } catch (error) {
        console.error(`回调函数 ${callbackName} 执行出错:`, error);
      }
    } else {
      console.warn(`回调函数 ${callbackName} 不可用`);
    }
  }

  /**
   * 批量安全调用回调函数
   * @param {Object} callbacks - 回调函数对象
   * @param {Array} callbackConfigs - 回调配置数组 [{name, args}, ...]
   */
  static safeBatchCall(
    callbacks: Record<string, (...args: any[]) => void> | null | undefined,
    callbackConfigs: Array<{ name: string; args?: any[] }>,
  ): void {
    callbackConfigs.forEach((config) => {
      const { name, args = [] } = config;
      this.safeCall(callbacks, name, ...args);
    });
  }
}
