import { Util, ModelTool, MobTabExpViewInterface } from "ibiz-core";
import { CounterService } from "ibiz-core";
import { MainViewBase } from "./main-view-base";
import { IPSAppDETabExplorerView, IPSTabExpPanel } from '@ibiz/dynamic-model-api';

/**
 * 分页导航视图基类
 *
 * @export
 * @class MobTabExpViewBase
 * @extends {MainViewBase}
 */
export class MobTabExpViewBase extends MainViewBase implements MobTabExpViewInterface {


    /**
     * 视图实例
     * 
     * @memberof MobTabExpViewBase
     */
    public declare viewInstance: IPSAppDETabExplorerView;

    /**
     * 导航栏实例
     *
     * @public
     * @type {IBizMobTabExpPanelModel}
     * @memberof MobTabExpViewBase
     */
    public tabExpPanelInstance!: IPSTabExpPanel;

    /**
     * 引擎初始化
     *
     * @param {*} [opts={}] 引擎参数
     * @memberof MobTabExpViewBase
     */
    public engineInit(opts: any = {}): void {
        if (this.Environment && this.Environment.isPreviewMode) {
            return;
        }
        if (this.engine && this.tabExpPanelInstance) {
            let engineOpts = Object.assign({
                view: this,
                p2k: '0',
                isLoadDefault: this.viewInstance?.loadDefault,
                keyPSDEField: this.appDeCodeName.toLowerCase(),
                majorPSDEField: this.appDeMajorFieldName.toLowerCase(),
            }, opts)
            this.engine.init(engineOpts);
        }
    }


    /**
     * 初始化编辑视图实例
     * 
     * @memberof MobTabExpViewBase
     */
    public async viewModelInit() {
        this.viewInstance = (this.staticProps.modeldata) as IPSAppDETabExplorerView;
        this.tabExpPanelInstance = ModelTool.findPSControlByName('tabexppanel', this.viewInstance.getPSControls()) as IPSTabExpPanel;
        await super.viewModelInit();
    }

    /**
     * 渲染内容区
     * 
     * @memberof ViewBase
     */
    public renderContent() {
        const id = this.viewInstance.codeName;
        return <ion-content ref="ionScroll" id={id} slot="content" scroll-y={'false'}>
            {this.renderBodyMessage()}
            {this.renderMainContent()}
        </ion-content>
    }

    /**
     * 渲染视图主体内容区
     * 
     * @memberof MobTabExpViewBase
     */
    public renderMainContent() {
        let { targetCtrlName, targetCtrlParam, targetCtrlEvent } = this.computeTargetCtrlData(this.tabExpPanelInstance);
        return this.$createElement(targetCtrlName, { slot: 'default', props: targetCtrlParam, ref: this.tabExpPanelInstance.name, on: targetCtrlEvent });
    }


    /**
     * 初始化计数器服务
     * 
     * @memberof MobTabExpViewBase
     */
    public async initCounterService(param: any) {
        const appCounterRef = this.tabExpPanelInstance.getPSAppCounterRefs();
        if (appCounterRef && appCounterRef.length > 0) {
            for (const counterRef of appCounterRef) {
                const counter = counterRef.getPSAppCounter?.();
                if (counter) {
                    await counter.fill(true);
                    const counterService: any = new CounterService();
                    await counterService.loaded(counter, { context: this.context, viewparams: this.viewparams });
                    const tempData: any = { id: counterRef.id, path: counter.modelPath, service: counterService };
                    this.counterServiceArray.push(tempData);
                }
            }
        }
    }
}