import { UIServiceRegister } from '@ibizstudio/runtime';
import { CtrlLoadingService } from '..';
import { ControlBase } from './control-base';
import { ModelTool, Util } from '@ibizstudio/runtime';
/**
 * 实体部件基础公共基类
 *
 * @export
 * @class MainControlBase
 * @extends {ControlBase}
 */
export class MainControlBase extends ControlBase {
    constructor() {
        super(...arguments);
        /**
         * 界面行为模型
         *
         * @type {*}
         * @memberof MainControlBase
         */
        this.actionModel = {};
    }
    /**
     * 应用实体codeName
     *
     * @readonly
     * @memberof MainControlBase
     */
    get appDeCodeName() {
        var _a, _b, _c;
        return ((_c = (_b = (_a = this.controlInstance) === null || _a === void 0 ? void 0 : _a.getPSAppDataEntity) === null || _b === void 0 ? void 0 : _b.call(_a)) === null || _c === void 0 ? void 0 : _c.codeName) || '';
    }
    /**
     * 应用实体映射实体名称
     *
     * @readonly
     * @memberof MainControlBase
     */
    get deName() {
        var _a, _b;
        return ((_b = (_a = this.controlInstance) === null || _a === void 0 ? void 0 : _a.getPSAppDataEntity()) === null || _b === void 0 ? void 0 : _b.getPSDEName()) || '';
    }
    /**
     * 应用实体主键属性codeName
     *
     * @readonly
     * @memberof MainControlBase
     */
    get appDeKeyFieldName() {
        var _a, _b;
        return ((_b = ModelTool.getAppEntityKeyField((_a = this.controlInstance) === null || _a === void 0 ? void 0 : _a.getPSAppDataEntity())) === null || _b === void 0 ? void 0 : _b.codeName) || '';
    }
    /**
     * 应用实体主信息属性codeName
     *
     * @readonly
     * @memberof MainControlBase
     */
    get appDeMajorFieldName() {
        var _a, _b;
        return ((_b = ModelTool.getAppEntityMajorField((_a = this.controlInstance) === null || _a === void 0 ? void 0 : _a.getPSAppDataEntity())) === null || _b === void 0 ? void 0 : _b.codeName) || '';
    }
    /**
     * 监听静态参数变化
     *
     * @param {*} newVal
     * @param {*} oldVal
     * @memberof MainControlBase
     */
    onStaticPropsChange(newVal, oldVal) {
        this.newdata = newVal.newdata;
        this.opendata = newVal.opendata;
        super.onStaticPropsChange(newVal, oldVal);
        this.viewLoadingService = newVal.viewLoadingService;
    }
    /**
     * 部件模型数据初始化
     *
     * @memberof MainControlBase
     */
    async ctrlModelInit(args) {
        var _a;
        await super.ctrlModelInit();
        this.initCtrlActionModel();
        this.appUIService = await UIServiceRegister.getService(this.context, (_a = this.appDeCodeName) === null || _a === void 0 ? void 0 : _a.toLowerCase());
        if (this.appUIService) {
            await this.appUIService.loaded();
        }
    }
    /**
     * 初始化界面行为模型
     *
     * @type {*}
     * @memberof MainControlBase
     */
    initCtrlActionModel() { }
    /**
     * 部件初始化
     *
     * @param {*} [args]
     * @memberof MainControlBase
     */
    ctrlInit(args) {
        super.ctrlInit(args);
        // 构造部件加载服务
        this.ctrlLoadingService = new CtrlLoadingService(this.viewLoadingService);
    }
    /**
     * 部件销毁
     *
     * @memberof MainControlBase
     */
    ctrlDestroyed() {
        super.ctrlDestroyed();
        if (this.appStateEvent) {
            this.appStateEvent.unsubscribe();
        }
    }
    /**
     * 部件刷新数据
     *
     * @param {*} args
     * @memberof  MainControlBase
     */
    refresh(args) { }
    /**
     * 开始加载
     *
     * @memberof MainControlBase
     */
    ctrlBeginLoading() {
        this.ctrlLoadingService.beginLoading(this.controlId);
    }
    /**
     * 结束加载
     *
     * @memberof MainControlBase
     */
    ctrlEndLoading() {
        this.ctrlLoadingService.endLoading();
    }
    /**
     * 处理部件UI请求
     *
     * @param {string} action 行为名称
     * @param {*} context 上下文
     * @param {*} viewparam 视图参数
     * @memberof MainControlBase
     */
    onControlRequset(action, context, viewparam) {
        this.ctrlBeginLoading();
    }
    /**
     * 处理部件UI响应
     *
     * @param {string} action 行为
     * @param {*} response 响应对象
     * @memberof MainControlBase
     */
    onControlResponse(action, response) {
        this.ctrlEndLoading();
        if (Object.is(action, 'load')) {
            this.isControlLoaded = true;
        }
        if (response && response.status && response.status == 403) {
            this.enableControlUIAuth = false;
            this.ctrlEvent({
                controlname: this.controlInstance.name,
                action: 'authlimit',
                data: response,
            });
        }
    }
    /**
     * 转化数据
     *
     * @param {*} args 数据
     * @memberof  MainControlBase
     */
    transformData(args) {
        let _this = this;
        if (!_this.appDeCodeName) {
            return;
        }
        if (_this.service && _this.service.handleRequestData instanceof Function && _this.service.handleRequestData('transform', Util.deepCopy(_this.context), args)) {
            return _this.service.handleRequestData('transform', Util.deepCopy(_this.context), args)['data'];
        }
    }
    /**
     * 获取视图逻辑标识（拼合逻辑：部件标识_列标识_成员标识_click）
     *
     * @param {*} args
     * @memberof  MainControlBase
     */
    getViewLogicTag(ctrlTag, columnTag, detailTag) {
        return `${ctrlTag}_${columnTag}_${detailTag}_click`;
    }
}
