'use strict';

import { JV } from './jpc_value_define';
import { IRptTpl, IGroupField, IOrgGroupField } from '../interface/basic'
import { IDataObjProps } from '../interface/enum'
export const JpcField = {
    createNew(rptTpl: IRptTpl) {
        let me = this;
        let JpcFieldResult = {
            离散指标_集合: {},
            主数据指标_集合: {},
            从数据指标_集合: {},
            无映射离散指标_集合: {},
            主数据指标_拓展集合: {},
            从数据指标_拓展集合: {}
        };
        if (rptTpl.指标_数据_映射 && rptTpl.指标_数据_映射.离散指标_集合) {
            for (let i = 0; i < rptTpl.指标_数据_映射.离散指标_集合.length; i++) {
                me.createSingle(rptTpl.指标_数据_映射.离散指标_集合[i], JpcFieldResult.离散指标_集合, IDataObjProps.discrete_data, i);
            }
        }
        if (rptTpl.指标_数据_映射 && rptTpl.指标_数据_映射.主数据指标_集合) {
            for (let i = 0; i < rptTpl.指标_数据_映射.主数据指标_集合.length; i++) {
                me.createSingle(rptTpl.指标_数据_映射.主数据指标_集合[i], JpcFieldResult.主数据指标_集合, IDataObjProps.master_data, i);
            }
        }
        if (rptTpl.指标_数据_映射 && rptTpl.指标_数据_映射.从数据指标_集合) {
            for (let i = 0; i < rptTpl.指标_数据_映射.从数据指标_集合.length; i++) {
                me.createSingle(rptTpl.指标_数据_映射.从数据指标_集合[i], JpcFieldResult.从数据指标_集合, IDataObjProps.detail_data, i);
            }
        }
        if (rptTpl.无映射离散指标_集合) {
            for (let i = 0; i < rptTpl.无映射离散指标_集合.length; i++) {
                me.createSingle(rptTpl.无映射离散指标_集合[i], JpcFieldResult.无映射离散指标_集合, "NA", -10);
            }
        }
        if (rptTpl.指标_数据_映射 && rptTpl.指标_数据_映射.主数据指标_拓展集合) {
            for (let i = 0; i < rptTpl.指标_数据_映射.主数据指标_拓展集合.length; i++) {
                me.createSingle(rptTpl.指标_数据_映射.主数据指标_拓展集合[i], JpcFieldResult.主数据指标_拓展集合, IDataObjProps.master_data_ex, i);
            }
        }
        if (rptTpl.指标_数据_映射 && rptTpl.指标_数据_映射.从数据指标_拓展集合) {
            for (let i = 0; i < rptTpl.指标_数据_映射.从数据指标_拓展集合.length; i++) {
                me.createSingle(rptTpl.指标_数据_映射.从数据指标_拓展集合[i], JpcFieldResult.从数据指标_拓展集合, IDataObjProps.detail_data_ex, i);
            }
        }
        //NODE_MASTER_FIELDS_EX
        return JpcFieldResult;
    },
    createSingle(fieldNode: IOrgGroupField, parentObj: Record<string, IOrgGroupField>, dataNodeName: IDataObjProps | string, sequence: number) {
        if (fieldNode && fieldNode.ID) {
            let item = {
                ID: fieldNode.ID,
                Name: fieldNode.Name,
                DataType: fieldNode.DataType,
                // Precision : null//  edit by lish
                Precision: {}
            } as any;
            if (fieldNode.Precision) {
                item.Precision = {};
                item.Precision.type = fieldNode.Precision.type;
                if (fieldNode.Precision.type === 'fixed') {
                    item.fixedPrecisionNum = fieldNode.fixedPrecisionNum;
                } else {
                    item.Precision.flexibleRefFieldID = fieldNode.Precision.flexibleRefFieldID;
                    item.flexiblePrecisionRefObj = fieldNode.flexiblePrecisionRefObj;
                }
            }
            item.DataNodeName = dataNodeName;
            item.DataSeq = sequence;
            parentObj["ID_" + fieldNode.ID] = item;
        }
    }
};