import { IPSAppDEUIAction } from '@ibiz/dynamic-model-api';
import { PluginService } from 'ibiz-core';
import { AppBackEndAction } from './app-backend-action';
import { AppCustomAction } from './app-custom-action';
import { AppFrontAction } from './app-front-action';
import { AppSysAction } from './app-sys-action';

export class AppActionFactory {

    /**
     * 插件服务
     *
     * @protected
     * @static
     * @type {PluginService}
     * @memberof AppActionFactory
     */
    protected static pluginService: PluginService = PluginService.getInstance();

    /**
     * 获取界面行为
     *
     * @public
     * @static
     * @memberof AppActionFactory
     */
    public static async getInstance(modelData: IPSAppDEUIAction, context: any) {
        const plugin = modelData.getPSSysPFPlugin();
        if (plugin) {
            const importPlugin: any = this.pluginService.getPluginInstance('UIACTION', plugin.pluginCode);
            if (importPlugin) {
                const importModule = await importPlugin();
                return new importModule.default(modelData, context);
            }
        } else {
            switch (modelData.uIActionMode) {
                case 'FRONT':
                    return new AppFrontAction(modelData, context);
                case 'BACKEND':
                    return new AppBackEndAction(modelData, context);
                case 'SYS':
                    return new AppSysAction(modelData, context);
                case 'CUSTOM':
                    return new AppCustomAction(modelData, context);
                default:
                    return undefined;
            }
        }
    }
}
