/**
 * Created by Zhong on 2017/8/25.
 */

let gljSelOprObj = {
    parentNodeIds: {},
    treeObj:null,
    rootNode: null,//分类树根节点
    radiosSelected: null,//allGljs, stdGljs, complementaryGljs
    workBook: null,
    selectedList: [],//选中的工料机
    setting: {
        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"}
        ]
    },
    setProp: function (prop, value, gljList) {
        for(let i = 0, len = gljList.length; i < len; i++){
            gljList[i][prop] = value;
        }
    },
    sortGlj: function(gljList) {
        gljList.sort(function(a, b){
            let rst = 0;
            if (a.code > b.code) rst = 1
            else if (a.code < b.code) rst = -1;
            return rst;
        });
    },
    switchToGljId: function (gljList) {
        for(let glj of gljList){
            glj.gljId = glj.ID;
            delete glj.ID;
        }
    },
    initGljList: function(gljList) {
        if(priceProperties && priceProperties.length){
            const priceField = priceProperties[0].price.dataCode;
            for(let glj of gljList){
                glj.basePrice = glj.priceProperty && glj.priceProperty[priceField] ? glj.priceProperty[priceField] : 0;
            }
        }
        this.stdGljList = gljList;
        this.switchToGljId(this.stdGljList);
        this.sortGlj(this.stdGljList);
    },
    initGljClassTree: function (gljTree) {
        zTreeHelper.createTree(gljTree, gljSelTreeOprObj.setting, "selGljTree", gljSelOprObj);
        const rootNode = gljSelOprObj.treeObj.getNodes()[0];
        if(rootNode && rootNode.isParent && rootNode.isFirstNode){
            gljSelOprObj.rootNode = rootNode;
        }
        gljSelOprObj.buildSheet($('#gljSelSheet')[0]);
    },
    buildSheet: function (container) {
        let me = gljSelOprObj;
        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.bindBtnOpr($('#gljSelY'));
        me.radiosChange();
    },
    onClipboardPasting: function (sender, args) {
        args.cancel = true;
    },
    onCellEditStart: function (sender, args) {
        args.cancel = true;
    },
    onButtonClicked: function (sender, args) {
        let me = gljSelOprObj;
        let val = args.sheet.getValue(args.row, args.col);
        let thisGlj = me.currentCache[args.row];
        thisGlj.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].gljId === thisGlj.gljId){
                        isExist = true;
                        break;
                    }
                }
                if(!isExist){
                    thisGlj.consumeAmt = 0;
                    me.selectedList.push(_.cloneDeep(thisGlj));
                }
            }
            else if(val === false){
                for(let i = 0, len = me.selectedList.length; i < len; i++){
                    if(me.selectedList[i].gljId === thisGlj.gljId){
                        me.selectedList.splice(i, 1);
                        break;
                    }
                }
            }
        }
    },
    setShowGljList: function (gljList, clearChecked) {
        //初始为所有工料机
        let  me = this;
        let curRationGlj = rationGLJOprObj.cache['_GLJ_' + rationGLJOprObj.currentRationItem.ID];
        for(let i = 0; i < gljList.length; i++){
            //去除与已添加的组成物重复的条目
            let isExist = false;
            for(let j = 0; j < curRationGlj.length; j++){
                if(curRationGlj[j].gljId === gljList[i].gljId){
                    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 me = gljSelOprObj;
        $('#gljSearchKeyword').val('');//恢复搜索文本
        me.selectedList = [].concat(rationGLJOprObj.cache['_GLJ_' + rationGLJOprObj.currentRationItem.ID]);
        //默认radio所有工料机
        if(typeof $("input[name='glj']:checked")[0] !== 'undefined'){
            $("input[name='glj']:checked")[0].checked = false;
        }
        $("input[value = 'allGljs']")[0].checked = true;
        me.radiosSelected = 'allGljs';
        //初始为所有工料机
        me.showGljList = [];
        if(me.radiosSelected === 'allGljs'){
            me.setShowGljList(me.stdGljList, true);
            me.sortGlj(me.showGljList);
        }
    },
    filterDatasAndShow: function () {
        let me = gljSelOprObj;
        let val = $("input[name='glj']:checked").val();
        me.radiosSelected = val;
        //选择改变，数据重新筛选显示
        me.showGljList = [];
        if(me.radiosSelected === 'allGljs'){
            me.setShowGljList(me.stdGljList);
        }
        //搜索匹配
        let searchStr = $('#gljSearchKeyword').val();
        if(searchStr && searchStr.trim() != ''){
            let reg = new RegExp(searchStr);
            me.showGljList = _.filter(me.showGljList, function (data) {
                return reg.test(data.code) || reg.test(data.name);
            });
        }
        me.sortGlj(me.showGljList);
        //重新显示
        me.showGljItems(me.showGljList, me.gljCurTypeId);
        //切换radio后更新cache
        if (me.currentOprParent = 1) {
            if(me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]){
                me.currentCache = me.getParentCache(me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]);
            }
            else{
                me.currentCache = [];
            }
        } else {
            me.currentCache = me.getCache();
        }
    },
    //监听radios选择事件
    radiosChange: function () {
        let me = gljSelOprObj;
        $('.glj-radio').change(function () {
            me.filterDatasAndShow();
        });
    },

    getParentCache: function (nodes) {
        let me = gljSelOprObj, 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 = gljSelOprObj, 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 = gljSelOprObj;
        if (me.workBook) {
            let cacheSection = [];
            let pArr = me.parentNodeIds["_pNodeId_" + type];
            for (let i = 0; i < data.length; i++) {
                if (pArr && pArr.indexOf(data[i].gljClass) >= 0) {
                    cacheSection.push(data[i]);
                } else if (type == data[i].gljClass) {
                    cacheSection.push(data[i]);
                }
            }
            sheetCommonObj.cleanSheet(me.workBook.getSheet(0), me.setting, -1);
            sheetsOprObj.showDataForGljSel(me.workBook.getSheet(0), me.setting, cacheSection, rationGLJOprObj.distTypeTree);
            me.workBook.getSheet(0).setRowCount(cacheSection.length);
            cacheSection = null;
        }
    },
    //组成物窗口按钮操作
    bindBtnOpr: function (conf) {//确定、取消、关闭按钮
        let me = gljSelOprObj, that = rationGLJOprObj;
        conf.click(function () {
            that.cache['_GLJ_' + that.currentRationItem.ID] = me.selectedList;
            that.updateRationItem(function () {
                that.sheet.getParent().focus();
                sheetCommonObj.cleanData(that.sheet, that.setting, -1);
                that.showGljItems(that.currentRationItem.ID);
                $('#selGlj').modal('hide');
            });
        });
    }
};

let gljSelTreeOprObj = {
     setting: {
        view: {
            expandSpeed: "",
            selectedMulti: false
        },
        edit: {
            enable: false,
            editNameSelectAll: true,
            showRemoveBtn: true,
            showRenameBtn: true,
            removeTitle: "删除节点",
            renameTitle: "更改名称"
        },
        data: {
            keep: {
                parent:true,
                leaf:true
            },
            key: {
                children: "items",
                name: "Name"
            },
            simpleData: {
                enable: false,
                idKey: "ID",
                pIdKey: "ParentID",
                rootPId: -1
            }
        },
        callback:{
            onClick: function(event,treeId,treeNode) {
                let me = gljSelOprObj, gljTypeId = treeNode.ID;
                if(me.gljCurTypeId !== treeNode.ID){
                    me.gljCurTypeId = treeNode.ID;
                    if (me.parentNodeIds["_pNodeId_" + treeNode.ID]) {
                        me.currentOprParent = 1;
                        me.currentCache = me.getParentCache(me.parentNodeIds["_pNodeId_" + treeNode.ID]);
                    } else {
                        me.currentCache = me.getCache();
                    }
                }
                me.showGljItems(me.showGljList, gljTypeId);
            }
        }
    }
};

$(document).ready(function () {
    $('#gljSearchKeyword').change(function () {
        gljSelOprObj.filterDatasAndShow();
    });
    $('#gljSearchKeyword').bind('keypress', function (e) {
        if(e.keyCode === 13){
            $(this).blur();
            return false;
        }
    });
    $('#selGlj').on('shown.bs.modal', function () {
        if (gljSelOprObj.workBook) {
            gljSelOprObj.workBook.refresh();
        }
    });
});