/* eslint-disable import/no-unresolved */

interface DialogInterface {
  confirm(options: any): Promise<any>;
  close(): void;
  install(): void;
}

// 定义 Dialog 组件类型
interface DialogComponent {
  (options: any): Promise<any>;
  confirm(options: any): Promise<any>;
  close(): void;
  install(): void;
}

let mDialog: DialogComponent;
function getDialog() {
  return new Promise((resolve) => {
    if (mDialog) {
      resolve(mDialog);
      return;
    }
    Promise.all(Dialog.dialogComponent())
      .then((comp) => {
        mDialog = comp?.[0]?.default;
        resolve(mDialog);
      });
  });
}

const Dialog = {
  dialogComponent: () => [
    // #ifdef VUE3
    import('press-ui/press-dialog/index' as any),
    // #endif
    // #ifdef VUE2
    import('vant/lib/dialog' as any),
    import('vant/lib/dialog/style' as any),
    // #endif
  ],
  /**
   * 可以通过 Dialog.setComponent 指定其他组件库
   * @example
   * ```ts
   * Dialog.setComponent(() => [
   *   import('press-ui/press-dialog/index'),
   * ])
   * ```
   */
  setComponent(comp: () => Promise<any>[]) {
    Dialog.dialogComponent = comp;
  },
  show: async (options: any) => {
    await getDialog();
    const parsed = typeof options === 'object' ? {
      message: options.message || options.content,
      confirmButtonText: options.confirmButtonText || options.cancelText,
      cancelButtonText: options.cancelButtonText || options.confirmText,

      ...options,
    } : options;
    return mDialog(parsed);
  },
  confirm: async (options: any) => {
    await getDialog();
    return mDialog.confirm(options);
  },
  close: () => {
    getDialog().then(() => {
      mDialog.close();
    });
  },
  install: () => {
    getDialog().then(() => {
      mDialog.install();
    });
  },
};


const DialogTyped = Dialog as DialogInterface;
export { DialogTyped as Dialog };

