import { GetModelService, LogUtil, StringUtil, Util, ViewTool } from '@ibizstudio/runtime';
import { MainViewBase } from "./mainview-base";
/**
 * 实体数据重定向视图基类
 *
 * @export
 * @class DeRedirectViewBase
 * @extends {MDViewBase}
 */
export class DeRedirectViewBase extends MainViewBase {
    constructor() {
        super(...arguments);
        /**
         * 视图是否被导航部件引用
         *
         * @memberof DeRedirectViewBase
         */
        this.viewUseByExpBar = false;
        /**
         * 是否首次加载
         *
         * @memberof DeRedirectViewBase
         */
        this.isFirstLoad = true;
    }
    /**
     * 监听静态参数变化
     *
     * @memberof DeRedirectViewBase
     */
    onStaticPropsChange(newVal, oldVal) {
        super.onStaticPropsChange(newVal, oldVal);
        this.viewUseByExpBar = newVal.viewUseByExpBar ? true : false;
    }
    /**
     * 监听动态参数变化
     *
     * @memberof DeRedirectViewBase
     */
    onDynamicPropsChange(newVal, oldVal) {
        super.onDynamicPropsChange(newVal, oldVal);
        if (!this.isFirstLoad && this.viewUseByExpBar) {
            this.executeRedirectLogic();
        }
        this.isFirstLoad = false;
    }
    /**
      * 初始化视图实例
      *
      * @param opts
      * @memberof DeRedirectViewBase
      */
    async viewModelInit() {
        this.viewInstance = (this.staticProps.modeldata);
        await super.viewModelInit();
        this.executeRedirectLogic();
    }
    /**
      * 执行重定向逻辑
      *
      * @memberof DeRedirectViewBase
      */
    async executeRedirectLogic() {
        var _a;
        let tempContext = Util.deepCopy(this.context);
        let tempViewParams = Util.deepCopy(this.viewparams);
        let localParams = {};
        if (this.viewparams && this.viewparams.srfwf) {
            localParams = { srfwf: this.viewparams.srfwf.toLowerCase() };
        }
        else {
            const appDataEntity = this.viewInstance.getPSAppDataEntity();
            localParams = { enableWorkflow: ((_a = this.viewInstance) === null || _a === void 0 ? void 0 : _a.enableWorkflow) && (appDataEntity === null || appDataEntity === void 0 ? void 0 : appDataEntity.enableWFActions) };
        }
        let dataSetParams = {};
        if (this.viewUseByExpBar && this.viewInstance.enableCustomGetDataAction) {
            const action = this.viewInstance.getGetDataPSAppDEAction();
            if (action) {
                Object.assign(dataSetParams, {
                    action: action.codeName
                });
            }
        }
        this.appUIService.getRDAppView(this.context, this.context[this.appDeCodeName.toLowerCase()], localParams, dataSetParams).then(async (result) => {
            var _a, _b, _c, _d, _e, _f, _g, _h, _j;
            if (!result) {
                return;
            }
            if (result.isError) {
                const data = (_a = result === null || result === void 0 ? void 0 : result.response) === null || _a === void 0 ? void 0 : _a.data;
                this.$throw((data === null || data === void 0 ? void 0 : data.messages) ? data.messages : this.$t('components.500.errortext1'));
                return;
            }
            let targetOpenViewRef = null;
            if (this.viewUseByExpBar) {
                //  重定向视图识别属性
                const typeFieldCodeName = (_d = (_c = (_b = this.viewInstance).getTypePSAppDEField) === null || _c === void 0 ? void 0 : _c.call(_b)) === null || _d === void 0 ? void 0 : _d.codeName;
                if (typeFieldCodeName && result.srfdata && result.srfdata[typeFieldCodeName.toLowerCase()]) {
                    targetOpenViewRef = this.viewInstance.getRedirectPSAppViewRefs().find((item) => {
                        return item.name.toLowerCase() === result.srfdata[typeFieldCodeName.toLowerCase()].toLowerCase();
                    });
                }
            }
            else {
                if (this.viewparams && this.viewparams.srfwf) {
                    targetOpenViewRef = this.viewInstance.getRedirectPSAppViewRefs().find((item) => {
                        return item.name === `${result.param.split(":")[0]}:${this.viewparams.srfwf.toUpperCase()}`;
                    });
                }
                if (!targetOpenViewRef) {
                    targetOpenViewRef = this.viewInstance.getRedirectPSAppViewRefs().find((item) => {
                        return item.name === result.param.split(":")[0];
                    });
                }
            }
            if (!targetOpenViewRef) {
                return;
            }
            //  导航上下文
            if (targetOpenViewRef.getPSNavigateContexts() &&
                targetOpenViewRef.getPSNavigateContexts().length > 0) {
                let localContextRef = Util.formatNavParam(targetOpenViewRef.getPSNavigateContexts(), true);
                let _context = Util.computedNavData(result.srfdata, tempContext, tempViewParams, localContextRef);
                //  填充字符串数据
                if (_context && Object.keys(_context).length > 0) {
                    for (const key of Object.keys(_context)) {
                        _context[key] = StringUtil.fillStrData(_context[key], tempContext, result.srfdata);
                    }
                }
                Object.assign(tempContext, _context);
            }
            //  导航视图参数
            if (targetOpenViewRef.getPSNavigateParams() &&
                targetOpenViewRef.getPSNavigateParams().length > 0) {
                let localViewParamsRef = Util.formatNavParam(targetOpenViewRef.getPSNavigateParams(), true);
                let _viewParams = Util.computedNavData(result.srfdata, tempContext, tempViewParams, localViewParamsRef);
                //  填充字符串数据
                if (_viewParams && Object.keys(_viewParams).length > 0) {
                    for (const key of Object.keys(_viewParams)) {
                        _viewParams[key] = StringUtil.fillStrData(_viewParams[key], tempContext, result.srfdata);
                    }
                }
                Object.assign(tempViewParams, _viewParams);
            }
            // 存在动态实例
            let splitArray = result.param.split(":");
            if (splitArray && (splitArray.length == 3)) {
                let curDynaInst = (_e = (await GetModelService({ instTag: splitArray[2], instTag2: splitArray[1] }))) === null || _e === void 0 ? void 0 : _e.getDynaInsConfig();
                if (curDynaInst) {
                    Object.assign(tempContext, { srfdynainstid: curDynaInst.id });
                }
            }
            if (result && result.hasOwnProperty('srfsandboxtag')) {
                Object.assign(tempContext, { 'srfsandboxtag': result['srfsandboxtag'] });
                Object.assign(tempViewParams, { 'srfsandboxtag': result['srfsandboxtag'] });
            }
            if (targetOpenViewRef.getRefPSAppView()) {
                let targetOpenView = targetOpenViewRef.getRefPSAppView();
                if (!targetOpenView) {
                    return;
                }
                await targetOpenView.fill(true);
                const view = {
                    viewname: 'app-view-shell',
                    height: targetOpenView.height,
                    width: targetOpenView.width,
                    title: targetOpenView.title
                };
                let parameters = [];
                if (!targetOpenView.openMode || targetOpenView.openMode == 'INDEXVIEWTAB') {
                    if (targetOpenView.getPSAppDataEntity()) {
                        parameters = [
                            { pathName: Util.srfpluralize((_f = targetOpenView.getPSAppDataEntity()) === null || _f === void 0 ? void 0 : _f.codeName).toLowerCase(), parameterName: (_g = targetOpenView.getPSAppDataEntity()) === null || _g === void 0 ? void 0 : _g.codeName.toLowerCase() },
                            { pathName: "views", parameterName: targetOpenView.getPSDEViewCodeName().toLowerCase() },
                        ];
                    }
                    else {
                        parameters = [
                            { pathName: targetOpenView.codeName.toLowerCase(), parameterName: targetOpenView.codeName.toLowerCase() }
                        ];
                    }
                }
                else {
                    if (targetOpenView.getPSAppDataEntity()) {
                        parameters = [{ pathName: Util.srfpluralize((_h = targetOpenView.getPSAppDataEntity()) === null || _h === void 0 ? void 0 : _h.codeName).toLowerCase(), parameterName: (_j = targetOpenView.getPSAppDataEntity()) === null || _j === void 0 ? void 0 : _j.codeName.toLowerCase() }];
                    }
                    if (targetOpenView && targetOpenView.modelPath) {
                        Object.assign(tempContext, { viewpath: targetOpenView.modelPath });
                    }
                }
                if (this.viewUseByExpBar) {
                    this.openTargetViewByExpBar(targetOpenView, view, tempContext, tempViewParams, [], parameters, []);
                }
                else {
                    this.openTargetView(targetOpenView, view, tempContext, tempViewParams, [], parameters, []);
                }
            }
        });
    }
    /**
     * 打开目标视图
     *
     * @memberof DeRedirectViewBase
     */
    openTargetView(openView, view, tempContext, data, deResParameters, parameters, args) {
        if (tempContext.srfdynainstid) {
            Object.assign(data, { srfdynainstid: tempContext.srfdynainstid });
        }
        const routePath = ViewTool.buildUpRoutePath(this.$route, tempContext, deResParameters, parameters, args, data);
        this.closeRedirectView(args);
        this.$router.replace({ path: routePath }).catch((error) => {
            LogUtil.log("重定向跳转......");
        });
    }
    /**
     * 打开目标视图（被导航栏引用的情况）
     *
     * @memberof DeRedirectViewBase
     */
    openTargetViewByExpBar(openView, view, tempContext, data, deResParameters, parameters, args) {
        this.viewNodeContent = undefined;
        if (openView && openView.modelPath) {
            Object.assign(tempContext, { viewpath: openView.modelPath });
        }
        const content = this.$createElement('app-view-shell', {
            key: Util.createUUID(),
            props: {
                staticProps: {
                    viewDefaultUsage: false,
                },
                dynamicProps: {
                    viewdata: JSON.stringify(tempContext),
                    viewparam: JSON.stringify(data)
                }
            },
            class: 'viewcontainer3',
        });
        this.viewNodeContent = content;
        this.$forceUpdate();
    }
    /**
     * 关闭当前重定向视图
     *
     * @memberof DeRedirectViewBase
     */
    closeRedirectView(args) {
        let view = this;
        if (view.viewdata) {
            view.$emit('view-event', { action: 'viewdataschange', data: Array.isArray(args) ? args : [args] });
            view.$emit('view-event', { action: 'close', data: Array.isArray(args) ? args : [args] });
        }
        else {
            if (this.viewInstance && this.viewInstance.viewStyle && Object.is(this.viewInstance.viewStyle, "STYLE2")) {
                this.closeViewWithStyle2(view);
            }
            else {
                this.closeViewWithDefault(view);
            }
        }
    }
    /**
     * 渲染视图内容节点
     *
     * @memberof DeRedirectViewBase
     */
    renderContent() {
        if (this.viewNodeContent) {
            return this.viewNodeContent;
        }
    }
}
