function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
import React, { createContext, useContext, useState, useCallback, useEffect, useRef } from 'react';
import { createPortal } from 'react-dom';
import PaymentResultToast from "./index";

// 支付结果弹窗显示配置类型

// 上下文类型定义

var PaymentResultToastContext = /*#__PURE__*/createContext(null);

// 全局PaymentResultToastProvider实例
var globalPaymentResultToastContext = null;

// 默认配置
var DEFAULT_TOAST_CONFIG = {
  width: 680,
  mask: true,
  maskClosable: false,
  closable: true,
  zIndex: 2000
};
export var PaymentResultToastProvider = function PaymentResultToastProvider(_ref) {
  var children = _ref.children;
  var _useState = useState(null),
    _useState2 = _slicedToArray(_useState, 2),
    toastProps = _useState2[0],
    setToastProps = _useState2[1];

  // 使用ref保存当前的自定义回调，避免重复创建函数
  var customOnCloseRef = useRef();
  var customOnCountdownCompleteRef = useRef();
  var closeToast = useCallback(function () {
    setToastProps(null);
  }, []);

  // 稳定化的onClose函数
  var handleClose = useCallback(function () {
    var _customOnCloseRef$cur;
    // 先调用自定义的onClose回调
    (_customOnCloseRef$cur = customOnCloseRef.current) === null || _customOnCloseRef$cur === void 0 || _customOnCloseRef$cur.call(customOnCloseRef);
    // 然后关闭toast
    closeToast();
  }, [closeToast]);

  // 稳定化的onCountdownComplete函数
  var handleCountdownComplete = useCallback(function () {
    var _customOnCountdownCom;
    (_customOnCountdownCom = customOnCountdownCompleteRef.current) === null || _customOnCountdownCom === void 0 || _customOnCountdownCom.call(customOnCountdownCompleteRef);
  }, []);
  var showToast = useCallback(function (config) {
    // 更新ref中的自定义回调
    customOnCloseRef.current = config.onClose;
    customOnCountdownCompleteRef.current = config.onCountdownComplete;
    var finalConfig = _objectSpread(_objectSpread({}, DEFAULT_TOAST_CONFIG), {}, {
      visible: true,
      statusClassName: config.statusClassName,
      title: config.title,
      subtitle: config.subtitle,
      changeDueText: config.changeDueText,
      actionButtons: config.actionButtons || [],
      autoClose: config.autoClose,
      autoCloseDelay: config.autoCloseDelay || 5,
      showCountdownProgress: config.showCountdownProgress,
      onCountdownComplete: handleCountdownComplete,
      // 使用稳定的handleCountdownComplete函数
      onClose: handleClose // 使用稳定的handleClose函数
    });
    setToastProps(finalConfig);
  }, [handleClose, handleCountdownComplete]);
  var showSuccess = useCallback(function (config) {
    showToast(_objectSpread(_objectSpread({}, config), {}, {
      statusClassName: 'success'
    }));
  }, [showToast]);
  var showFailed = useCallback(function (config) {
    showToast(_objectSpread(_objectSpread({}, config), {}, {
      statusClassName: 'failed'
    }));
  }, [showToast]);
  var showWalletPassFailed = useCallback(function (config) {
    showToast(_objectSpread(_objectSpread({}, config), {}, {
      statusClassName: 'wallet-pass-failed'
    }));
  }, [showToast]);
  var isVisible = !!(toastProps !== null && toastProps !== void 0 && toastProps.visible);
  var contextValue = {
    showSuccess: showSuccess,
    showFailed: showFailed,
    showWalletPassFailed: showWalletPassFailed,
    showToast: showToast,
    closeToast: closeToast,
    isVisible: isVisible
  };

  // 设置全局引用
  useEffect(function () {
    globalPaymentResultToastContext = contextValue;
    return function () {
      globalPaymentResultToastContext = null;
    };
  }, [contextValue]);
  return /*#__PURE__*/React.createElement(PaymentResultToastContext.Provider, {
    value: contextValue
  }, children, toastProps && /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(PaymentResultToast, toastProps), document.body));
};
export var usePaymentResultToast = function usePaymentResultToast() {
  var context = useContext(PaymentResultToastContext);
  if (!context) {
    throw new Error('usePaymentResultToast must be used within a PaymentResultToastProvider');
  }
  return context;
};

// 全局调用方法（用于兼容现有代码，无需Context）
export var showPaymentResultToastSuccess = function showPaymentResultToastSuccess(config) {
  if (globalPaymentResultToastContext) {
    globalPaymentResultToastContext.showSuccess(config);
  } else {
    console.error('PaymentResultToastProvider not found. Please wrap your app with PaymentResultToastProvider.');
  }
};
export var showPaymentResultToastFailed = function showPaymentResultToastFailed(config) {
  if (globalPaymentResultToastContext) {
    globalPaymentResultToastContext.showFailed(config);
  } else {
    console.error('PaymentResultToastProvider not found. Please wrap your app with PaymentResultToastProvider.');
  }
};
export var showPaymentResultToastWalletPassFailed = function showPaymentResultToastWalletPassFailed(config) {
  if (globalPaymentResultToastContext) {
    globalPaymentResultToastContext.showWalletPassFailed(config);
  } else {
    console.error('PaymentResultToastProvider not found. Please wrap your app with PaymentResultToastProvider.');
  }
};
export var showPaymentResultToast = function showPaymentResultToast(config) {
  if (globalPaymentResultToastContext) {
    globalPaymentResultToastContext.showToast(config);
  } else {
    console.error('PaymentResultToastProvider not found. Please wrap your app with PaymentResultToastProvider.');
  }
};
export var closePaymentResultToast = function closePaymentResultToast() {
  if (globalPaymentResultToastContext) {
    globalPaymentResultToastContext.closeToast();
  } else {
    console.error('PaymentResultToastProvider not found.');
  }
};

// 导出类型供外部使用