import { ModalFuncProps } from 'ant-design-vue';

export type Status = 'normal' | 'loading' | 'success' | 'error';

export interface ModalFuncPropsExtend extends ModalFuncProps {
  /**
   * 是否虚假的进度条
   *
   * Default: true
   */
  fake?: boolean;

  /**
   * 进度条百分比 0-100，传入一个 getter 函数，保持响应性
   *
   * 当 fake=true percent 无效
   *
   * Default: 0
   *
   * @example
   * ```ts
   * const state = reactive({
   *   percent: 10,
   *   foo: 'foo'
   * });
   * ModalProgress.show({
   *   percent: () => state.percent
   * });
   *
   * // or
   *
   * const percent = ref(10);
   * ModalProgress.show({
   *   percent: () => percent.value
   * });
   * ```
   */
  percent?: () => number;

  /**
   * 状态 'normal' | 'loading' | 'success' | 'error'
   *
   * Default: 'normal'
   */
  status?: () => Status;

  /**
   * 提示文本，可传入具有返回值的 getter 函数，保持响应性
   *
   * Default
   * normal: '',
   * loading: '加载中，请稍后...',
   * success: '',
   * error: '发生错误，请稍后再试'
   */
  tips?: {
    normal?: string;
    loading?: string;
    success?: string;
    error?: string;
  };

  /**
   * status 为 success 是否自动关闭，为 false 时，closable 不能为 false，否则用户没有关闭渠道
   *
   * Default: true
   */
  successAutoClose?: boolean;

  /**
   * status 为 error 是否自动关闭，为 false 时，closable 不能为 false，否则用户没有关闭渠道
   *
   * Default: true
   */
  errorAutoClose?: boolean;

  /**
   * 成功时回调(1.在成功状态 && 弹框被关闭之后触发，2.当弹框被提前关闭了，状态改变成功时依然触发)
   */
  onSuccess?: () => void;

  /**
   * 失败时回调(1.在失败状态 && 弹框被关闭之后触发，2.当弹框被提前关闭了，状态改变失败时依然触发)
   */
  onError?: () => void;
}
