/**
 * Created by Zhong on 2017/10/16.
 */
/*
 弹出组成物窗口 组成物表
 * */
let componentOprObj = {
    treeObj:null,
    rootNode: null,//分类树根节点
    workBook: null,
    selectedList: [],//选中的组成物
    setting: {
        owner: "components",
        header: [
            {headerName:"选择", headerWidth: 40, dataCode: "select", hAlign: "center", vAlign: "center"},
            {headerName:"编码",headerWidth:80,dataCode:"code", dataType: "String", formatter: "@", hAlign: "left", vAlign: "center"},
            {headerName:"名称",headerWidth:120,dataCode:"name", dataType: "String", hAlign: "left", vAlign: "center"},
            {headerName:"规格型号",headerWidth:80,dataCode:"specs", dataType: "String", hAlign: "center", vAlign: "center"},
            {headerName:"单位",headerWidth:80,dataCode:"unit", dataType: "String", hAlign: "center", vAlign: "center"},
            {headerName:"单价",headerWidth:80,dataCode:"basePrice", dataType: "Number", formatter: "0.00", hAlign: "right", vAlign: "center"},
            {headerName:"类型",headerWidth:80,dataCode:"gljType", dataType: "String",  hAlign: "center", vAlign: "center"}
        ]
    },
    buildSheet: function (container) {
        let me = componentOprObj;
        me.workBook = sheetCommonObj.buildSheet(container, me.setting, 30);
        me.workBook.getSheet(0).setColumnWidth(0, 20, GC.Spread.Sheets.SheetArea.rowHeader);
        me.workBook.getSheet(0).setFormatter(-1, 1, "@", GC.Spread.Sheets.SheetArea.viewport);
        me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.EditStarting, me.onCellEditStart);
        me.workBook.getSheet(0).bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
        me.workBook.bind(GC.Spread.Sheets.Events.ButtonClicked, me.onButtonClicked);//复选框点击事件
        me.workBook.getSheet(0).getRange(-1, 0, -1, 1).cellType(new GC.Spread.Sheets.CellTypes.CheckBox());
        me.componentsBtnOpr($('#componentsConf'));
    },
    onClipboardPasting: function (sender, args) {
        args.cancel = true;
    },
    onCellEditStart: function (sender, args) {
        args.cancel = true;
    },
    onButtonClicked: function (sender, args) {
        let me = componentOprObj, re = repositoryGljObj;
        let val = args.sheet.getValue(args.row, args.col);
        let thisComponent = me.currentCache[args.row];
        thisComponent.isChecked = val;
        if(args.sheet.isEditing()){
            args.sheet.endEdit(true);
        }
        else{
            //维护选中组成物列表
            if(val === true){
                let isExist = false;
                for(let i = 0, len = me.selectedList.length; i < len; i++){
                    if(me.selectedList[i].ID === thisComponent.ID){
                        isExist = true;
                        break;
                    }
                }
                if(!isExist){
                    me.selectedList.push(thisComponent);
                }
            }
            else if(val === false){
                for(let i = 0, len = me.selectedList.length; i < len; i++){
                    if(me.selectedList[i].ID === thisComponent.ID){
                        me.selectedList.splice(i, 1);
                        break;
                    }
                }
            }
        }
    },
    setShowGljList: function (gljList, clearChecked) {
        let that = repositoryGljObj, me = componentOprObj;
        for(let i = 0; i < gljList.length; i++){
            if(machineAllowComponent.includes(that.currentGlj.gljType) && machineComponent.includes(gljList[i].gljType) ||
                materialAllowComponent.includes(that.currentGlj.gljType) && gljList[i].gljType === 201||
                that.currentGlj.gljType === 4 && gljList[i].gljType === 4 && (!gljList[i].component || gljList[i].component.length === 0) && gljList[i].ID !== that.currentGlj.ID){
                let isExist = false;
                for(let j = 0; j < that.currentComponent.length; j++){
                    if(that.currentComponent[j].ID === gljList[i].ID){
                        isExist = true;
                        break;
                    }
                }
                if(!isExist){
                    if(clearChecked){
                        gljList[i].isChecked = false;
                    }
                }
                else {
                    gljList[i].isChecked = true;
                }
                me.showGljList.push(gljList[i]);
            }
        }
    },
    //初始默认radio
    initRadio: function () {
        let that = repositoryGljObj, me = componentOprObj;
        //初始化组成物列表
        me.selectedList = [].concat(that.currentComponent);
        //初始为所有工料机,机械类型可添加机械组成物，混凝土,砂浆、配合比可添加普通材料
        me.showGljList = [];
        me.setShowGljList(that.gljList, true);
        that.sortGlj(me.showGljList);

    },
    getParentCache: function (nodes) {
        let me = componentOprObj, rst = [];
        for(let i = 0; i < me.showGljList.length; i++){
            if(nodes.indexOf(me.showGljList[i].gljClass) !== -1){
                rst.push(me.showGljList[i]);
            }
        }
        rst.sort(function (a, b) {
            let rst = 0;
            if(a.code > b.code) rst = 1;
            else if(a.code < b.code)rst = -1;
            return rst;
        });
        return rst;
    },
    getCache: function() {
        let me = componentOprObj, rst = [];
        for (let i = 0; i < me.showGljList.length; i++) {
            if (me.showGljList[i].gljClass == me.gljCurTypeId) {
                rst.push(me.showGljList[i]);
            }
        }
        return rst;
    },
    showGljItems: function(data, type) {
        let me = componentOprObj, re = repositoryGljObj;
        if (me.workBook) {
            let cacheSection = data;
            sheetCommonObj.cleanSheet(me.workBook.getSheet(0), me.setting, -1);
            sheetsOprObj.showData(me.workBook.getSheet(0), me.setting, cacheSection, re.distTypeTree);
            me.workBook.getSheet(0).setRowCount(cacheSection.length);
            cacheSection = null;
        }
    },
    //组成物窗口按钮操作
    componentsBtnOpr: function (conf) {//确定、取消、关闭按钮
        let me = componentOprObj, that = gljComponentOprObj, re = repositoryGljObj;
        conf.click(function () {
            //添加选择添加的组成物
            let updateArr = [];
            let newComponent = [];
            for(let i = 0, len = me.selectedList.length; i < len; i++){
                let isExist = false;
                for(let j = 0, jLen = re.currentGlj.component.length; j < jLen; j++){
                    if(me.selectedList[i].ID === re.currentGlj.component[j].ID){
                        newComponent.push({ID: me.selectedList[i].ID, consumeAmt: re.currentGlj.component[j].consumeAmt});
                        isExist = true;
                        break;
                    }
                }
                if(!isExist){
                    newComponent.push({ID: me.selectedList[i].ID, consumeAmt: 0});
                }
            }
            re.currentGlj.component = newComponent;
            let gljBasePrc = that.reCalGljBasePrc(re.getCurrentComponent(re.currentGlj.component));
            if(gljBasePrc !== re.currentGlj.basePrice){
                re.currentGlj.basePrice = gljBasePrc;
                re.reshowGljBasePrc(re.currentGlj);
            }
            updateArr.push(re.currentGlj);
            that.updateComponent(updateArr);
            $('#componentsCacnel').click();
        });
    }
};

let componentTypeTreeOprObj = {
    onClick: function(event,treeId,treeNode) {
        let me = componentOprObj, re = repositoryGljObj, that = gljComponentOprObj, gljTypeId = treeNode.ID;
        if(me.gljCurTypeId !== treeNode.ID){
            me.gljCurTypeId = treeNode.ID;
            if (re.parentNodeIds["_pNodeId_" + treeNode.ID]) {
                me.currentOprParent = 1;
                me.currentCache = me.getParentCache(re.parentNodeIds["_pNodeId_" + treeNode.ID]);
            } else {
                me.currentCache = me.getCache();
            }
        }
        //me.showGljItems(me.showGljList, gljTypeId);
        me.showGljItems(me.currentCache, gljTypeId);
    }
}