import { initFunctionalDialog } from 'press-ui/common/component-handler/init-functional-dialog';
import { addFunctionForDialog } from 'press-ui/press-dialog/handler-helper';

import { DIALOG_PROPS, DEFAULT_GP_DIALOG_ID } from './computed';

// #ifdef H5
import VueDialog from './press-gp-dialog.vue';
// #endif

import type { IOptions } from './types';


let queue: any[] = [];
const defaultOptions = Object.keys(DIALOG_PROPS).reduce((acc: Record<string, any>, item) => {
  acc[item] = DIALOG_PROPS[item as keyof typeof DIALOG_PROPS].default;
  return acc;
}, {
  selector: `#${DEFAULT_GP_DIALOG_ID}`,
});


let currentOptions = Object.assign({}, defaultOptions);


const Dialog = (options: IOptions) => initFunctionalDialog({
  options,
  currentOptions,
  id: DEFAULT_GP_DIALOG_ID,
  // #ifdef H5
  dialogComponent: VueDialog,
  // #endif
});

function updateQueue(arg: any) {
  queue = arg;
}

function updateCurrentOptions(arg: IOptions) {
  currentOptions = arg;
}

Dialog.show = (options: IOptions) => Dialog(options);
addFunctionForDialog({
  Dialog,
  queue,
  currentOptions,
  defaultOptions,
  updateQueue,
  updateCurrentOptions,
});

export default Dialog;
