/**
 * 防抖函数
 * @param func 要防抖的函数
 * @param wait 等待时间（毫秒）
 * @returns 防抖后的函数
 */
export var debounce = function debounce(func, wait) {
  var timeout = null;
  return function () {
    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }
    if (timeout) {
      clearTimeout(timeout);
    }
    timeout = setTimeout(function () {
      func.apply(null, args);
    }, wait);
  };
};

/**
 * 获取弹窗配置的默认值
 * @returns 默认的弹窗配置
 */
export var getDefaultModalConfig = function getDefaultModalConfig() {
  return {
    width: 501,
    // 更新为DOM节点中的宽度
    mask: false,
    maskClosable: false,
    // 默认值，会根据状态动态调整
    closable: true,
    zIndex: 1000
  };
};

/**
 * 一键关闭当前页面上所有的 PaymentResultToast
 * 这个函数是对现有 clearAllPaymentResultToasts 函数的封装，
 * 提供了更友好的 API 和额外的配置选项
 * 
 * 使用方法：
 * - closeAllPaymentResultToasts() // 带动画关闭
 * - closeAllPaymentResultToasts({ immediate: true }) // 立即关闭
 * 
 * @param options 配置选项
 * @param options.immediate 是否立即关闭（跳过退出动画），默认 false
 * @returns Promise<void> 返回 Promise，在所有 Toast 关闭完成后 resolve
 */
export var closeAllPaymentResultToasts = function closeAllPaymentResultToasts(options) {
  var _ref = options || {},
    _ref$immediate = _ref.immediate,
    immediate = _ref$immediate === void 0 ? false : _ref$immediate;
  return new Promise(function (resolve) {
    try {
      // 检查是否有 Toast 存在
      var toastElements = document.querySelectorAll('[data-toast-id]');
      if (toastElements.length === 0) {
        resolve();
        return;
      }
      if (immediate) {
        // 立即关闭：直接移除所有 Toast DOM 元素
        toastElements.forEach(function (element) {
          if (element.parentNode) {
            element.parentNode.removeChild(element);
          }
        });
        resolve();
      } else {
        // 带动画关闭：添加退出动画类，然后等待动画完成
        toastElements.forEach(function (element) {
          element.classList.add('toast-exiting');
        });

        // 等待退出动画完成后移除元素
        setTimeout(function () {
          toastElements.forEach(function (element) {
            if (element.parentNode) {
              element.parentNode.removeChild(element);
            }
          });
          resolve();
        }, 300); // 与 CSS 退出动画时间一致
      }
    } catch (error) {
      console.warn('关闭 PaymentResultToast 时发生错误:', error);
      resolve();
    }
  });
};

/**
 * 获取当前页面上 PaymentResultToast 的数量
 * @returns number 当前显示的 Toast 数量
 */
export var getToastCount = function getToastCount() {
  try {
    var toastElements = document.querySelectorAll('[data-toast-id]');
    return toastElements.length;
  } catch (error) {
    console.warn('获取 PaymentResultToast 数量时发生错误:', error);
    return 0;
  }
};

/**
 * 检查当前页面是否有正在显示的 PaymentResultToast
 * @returns boolean 是否有 Toast 正在显示
 */
export var hasActivePaymentResultToasts = function hasActivePaymentResultToasts() {
  return getToastCount() > 0;
};