/**
 * Created by chen on 2017/8/1.
 */

var subRateObject={
    views:null,
    datas:null,
    valueMap:null,
    canEdit:true,
    subRateSpread:null,
    subRateSheet:null,
    subRateSetting:{
        header: [
            {headerName: "参数名称", headerWidth: 110, dataCode: "name", dataType: "String"},
            {headerName: "参数值", headerWidth: 150, dataCode: "optionValue", dataType: "String",getText:'forOption'}
        ],
        view: {
            lockColumns: [0]
        },
        getText:{
            forOption:function (item,val) {
                let o = _.find(item.optionList,{'selected':true});
                return o?o.value:'';
            }
        }
    },
    columns: [
        {
            id: 'name',
            caption: '参数名称',
            dataField: 'name',
            width: 250,
            allowEditing: false
        },
        {
            id: 'typeName',
            caption: '参数值',
            dataField: 'typeName',
            width: 200,
            minWidth: 50,
            allowEditing: true,
            presenter:'<div><select class="form-control form-control-sm" id="{{=it.ID}}" onchange="subRateObject.subRateChange(this)" style="width: 100%">  </select></div>'
        },
        {
            id: 'ID',
            caption: 'ID',
            dataField: 'ID',
            width: 80,
            visible: false,
            allowEditing: false
        }
    ],
    options :{
        allowSorting: false,
        showRowHeader: true,
        colMinWidth: 80,
        rowHeight: 33,
        allowEditing: this.canEdit,
        editMode: 'inline',
        editUnit: 'cell',
        selectionUnit:(this.canEdit == true) ? "cell" : "row"
    },
    createSpreadView:function () {
        if (this.views) {
            this.views.destroy();
            this.views = null;
        }
        this.views = new GC.Spread.Views.DataView($('#subRate')[0],
            this.datas, this.columns, new GC.Spread.Views.Plugins.GridLayout(this.options));

        this.views["rowDbClick"].addHandler(function () {
            console.log('hh')
        });
        this.views.invalidate();
        document.querySelector('#subRate').focus();
        this.addComboboxOption(this.datas);

    },
    reFreshRateViews:function(sender,args) {
        subRateObject.datas = projectObj.project.FeeRate.getSubViewData(args.item);
        subRateObject.valueMap=projectObj.project.FeeRate.getValueMap(args.item);
        subRateObject.createSpreadView();
    },
    initSubRateSpread:function (item) {
        if(this.subRateSpread == null){
            this.subRateSpread = SheetDataHelper.createNewSpread($("#subRate")[0]);
            sheetCommonObj.spreadDefaultStyle(this.subRateSpread);
            this.subRateSheet = this.subRateSpread.getSheet(0);
            sheetCommonObj.initSheet(this.subRateSheet, this.subRateSetting, 30);
            this.subRateSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, this.onSubRateSelectChanged);
            this.subRateSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onSubRateValueChange);
            //this.subRateSheet.bind(GC.Spread.Sheets.Events.ValueChanged, me.onSheetValueChange);
            this.subRateSheet.name('subRateSheet');
        }
        subRateObject.datas = projectObj.project.FeeRate.getSubViewData(item);
        subRateObject.valueMap=projectObj.project.FeeRate.getValueMap(item);
        subRateObject.showSubRateData();
        disableRightMenu("subRate",this.subRateSpread);
        if(projectReadOnly){
            if(this.subRateSetting.view.lockColumns){
                this.subRateSetting.view.lockColumns = null;
            }
            disableSpread(this.subRateSpread);
        }
    },
    showSubRateData:function () {
        this.subRateSheet.setRowCount(0);
        sheetCommonObj.showData(this.subRateSheet, this.subRateSetting, this.datas);
        this.subRateSheet.setRowCount(this.datas.length);
        for(let row =0; row < this.datas.length;row++){
            this.setComboOptionCell(row,1,this.datas[row],this.subRateSheet);
        }
    },
    onSubRateSelectChanged:function (e,info) {
        info.sheet.repaint();
    },
    setComboOptionCell:function(row,col,subRate,sheet){
        let options=[];
        for(let op of subRate.optionList){
            options.push({text:op.name,value:op.value});
        }
        let dynamicCombo = sheetCommonObj.getDynamicCombo();//new GC.Spread.Sheets.CellTypes.ComboBox();
        dynamicCombo.items(options);
        dynamicCombo.editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.value);
        sheet.setCellType(row, col, dynamicCombo, GC.Spread.Sheets.SheetArea.viewport);
    },
    addComboboxOption:function (datas) {
        _.forEach(datas,function (item) {
            var selectvalue = 0;
            _.forEach(item.optionList,function (o) {
                var option =  $("<option>").val(o.value).text(o.name);
                $('#'+item.ID).append(option);
                if(o.selected){
                    selectvalue = o.value;
                }
            })
            $('#'+item.ID).val(selectvalue);
        })
    },
    subRateChange:function(select){
        let me = subRateObject;
        let selectValueList=[];
        let selectMap={};
        if(me.datas&&me.datas.length>0){
            $.bootstrapLoading.start();
            _.forEach(me.datas,function (d,key) {
                let selectValue = $('#'+d.ID).val();
                selectValueList.push(selectValue);
                selectMap[key]=selectValue;
            })
            let mapID =selectValueList.join('-');
            let rate = me.valueMap[mapID];
            feeRateObject.updateBySelect(rate,selectMap,mapID);
        }
    },
    onSubRateValueChange:function (e,info) {
        console.info(info);
        let me = subRateObject, selectValueList=[],selectMap={};
        if(me.datas&&me.datas.length>0){
            _.forEach(me.datas,function (d,key) {
                if(info.row == key){
                    selectMap[key]=info.newValue;
                }else {
                    let o = _.find(d.optionList,{'selected':true});
                    selectMap[key]=o.value;
                }
                selectValueList.push(selectMap[key]);
            })
            let mapID =selectValueList.join('-');
            let rate = me.valueMap[mapID];
            feeRateObject.updateBySelect(rate,selectMap,mapID);
        }
    },

    destorySpreadView:function () {
        if(this.views){
            this.views.destroy();
            this.views = null;
        }
        subRateObject.datas=null;
        subRateObject.valueMap=null;
    }
}
