/**
 * 工料机汇总相关
 *
 * @author CaiAoLin
 * @date 2017/6/15
 * @version
 */
let projectGLJSpread = null;
let projectGLJSheet = null;

// websocket所需
let host = '';
let socket = null;
let roomId = 0;
// 判定常量
let materialIdList = [];
let canNotChangeTypeId = [];
let GLJTypeConst = [];
// spreadjs载入数据所需
let jsonData = [];
let mixRatioConnectData = [];
let mixRatioMap = {};
// 单价文件相关
let usedUnitPriceInfo = {};
let usedTenderList = [];
let otherFileData = {};
let currentTag = '';
let isChanging = false;
let initPage = false;


$(document).ready(function () {
    $('#tab_gongliaoji').on('show.bs.tab', function (e) {
        $(e.relatedTarget.hash).removeClass('active');
        init();
    });

 /*   slideResize($("#glj-main"), function () {
        projectGLJSpread.sheetObj.spread.refresh();
    });*/

    // 单价文件切换弹框
    $('#change-dj').on('shown.bs.modal', function () {
        // 获取当前建设项数据
        let projectName = projectObj.project.projectInfo.fullFolder !== undefined &&
        projectObj.project.projectInfo.fullFolder.length > 0 ? projectObj.project.projectInfo.fullFolder[0] : '';
        $("#current-project-name").text(projectName);

        // 获取切换单价文件相关数据
        $.ajax({
            url: '/glj/get-project-info',
            type: 'post',
            data: {project_id: scUrlUtil.GetQueryString('project')},
            dataType: 'json',
            success: function (response) {
                if (response.err === 1) {
                    alert('数据传输错误!');
                    return false;
                }
                let data = response.data;
                // 本项目中的单价文件
                if (data.self.length > 0) {
                    let selfFileHtml = '';
                    for (let tmp of data.self) {
                        let select = usedUnitPriceInfo === tmp.id ? ' selected="selected"' : '';
                        selfFileHtml += '<option' + select + ' value="' + tmp.id + '">' + tmp.name + '</option>';
                    }
                    $("#self-file").html(selfFileHtml);
                }

                // 其他建设项目数据
                if (data.other.length > 0) {
                    let otherProjectHtml = '';
                    let otherFileHtml = '';
                    for (let tmp of data.other) {
                        otherProjectHtml += '<option value="' + tmp.ID + '">' + tmp.name + '</option>';
                        otherFileData[tmp.ID] = tmp.unitPriceList;
                        if (otherFileHtml !== '') {
                            continue;
                        }
                        for (let unitPrice of tmp.unitPriceList) {
                            otherFileHtml += '<option value="' + unitPrice.id + '">' + unitPrice.name + '</option>';
                        }
                    }
                    $("#other-project").html(otherProjectHtml);
                    $("#other-file").html(otherFileHtml);
                }
            }
        });
    });

  /*  // 单价文件另存为弹框
    $("#file-save-as-dialog").on('shown.bs.modal', function () {
        // 获取当前建设项数据
        $("#save-as-name").val(usedUnitPriceInfo.name + '(复件)');
    });*/




    // 单价文件切换确认
    /*$("#change-file-confirm").click(function () {
        if (isChanging) {
            return false;
        }
        let type = $("input[name='change-type']:checked").val();
        type = parseInt(type);
        let changeUnitPriceId = 0;
        if (type === 0) {
            // 从本项目中选择
            changeUnitPriceId = $("#self-file").val();
        } else {
            // 从其他项目中复制
            changeUnitPriceId = $("#other-file").val();
        }
        $('#change-dj').modal("hide");
        $.bootstrapLoading.start();
        $.ajax({
            url: '/glj/change-file',
            type: 'post',
            data: {project_id: scUrlUtil.GetQueryString('project'), change_id: changeUnitPriceId, type: type},
            error: function () {
                isChanging = false;
                $.bootstrapLoading.end();
            },
            beforeSend: function () {
                isChanging = true;
            },
            success: function (response) {
                isChanging = false;
                if (response.err === 1) {
                    let msg = response.msg !== undefined ? response.msg : '未知错误';
                    alert(msg);
                    $.bootstrapLoading.end();
                    return false;
                }
                projectObj.project.projectGLJ.loadData(function () {
                    let projectGLJ = projectObj.project.projectGLJ;
                    projectGLJ.loadCacheData();
                    unitPriceFileInit();
                    gljOprObj.refreshView();
                    projectObj.project.calcProgram.calcAllNodesAndSave();
                    if(socketObject.roomInfo){
                        let data ={
                            projectID:projectObj.project.ID(),
                            oldRoom:socketObject.roomInfo.unitFile,
                            newRoom:socketObject.getUnitFileRoomID(),
                            name:'unitFile'
                        }
                        socket.emit('changeNewRoom',data);
                        socketObject.roomInfo.unitFile = socketObject.getUnitFileRoomID();
                    }
                    $.bootstrapLoading.end();
                });
            }
        });
    });*/

/*    // 是否主动更改数据
    $("#message").on('click', '#load-data', function () {
        $("#message").html('正在加载...');
        // 重新加载数据到缓存
        projectObj.project.projectGLJ.loadData(function () {
            projectObj.project.projectGLJ.loadCacheData();
            $("#notify").slideUp('fast');
        });
    });*/

    /*$('#pop-dj').popover({
            placement: "bottom",
            html: true,
            trigger: "hover | focus",
            content: getUsedTenderInfo
        }
    );*/
});

/**
 * 初始化数据
 *
 * @return {void|boolean}
 */
function init() {
    projectObj.project.projectGLJ.loadData(function (data) {
        if (initPage==false||jsonData.length <= 0) {
            // 赋值
            jsonData = data.gljList !== undefined && data.gljList.length > 0 ? data.gljList : [];
            jsonData = filterProjectGLJ(jsonData);
            jsonData = sortProjectGLJ(jsonData);
            mixRatioConnectData = data.mixRatioConnectData !== undefined ? data.mixRatioConnectData : mixRatioConnectData;
            mixRatioMap = data.mixRatioMap !== undefined ? data.mixRatioMap : mixRatioMap;
           // host = data.constData.hostname !== undefined ? data.constData.hostname : '';
            materialIdList = data.constData.materialIdList !== undefined ? data.constData.materialIdList : materialIdList;
            //roomId = data.constData.roomId !== undefined ? data.constData.roomId : roomId;
            canNotChangeTypeId = data.constData.ownCompositionTypes !== undefined ?
                data.constData.ownCompositionTypes : canNotChangeTypeId;
            GLJTypeConst = data.constData.GLJTypeConst !== undefined ? JSON.parse(data.constData.GLJTypeConst) : GLJTypeConst;

            // 连接socket服务器  这里改成和费率的socket统一管理了，需要在主页面打开后就连接
           // socketInit();

            unitPriceFileInit();

            setTimeout(spreadInit, 1);
            initPage=true;
        } else {
            projectObj.project.projectGLJ.loadCacheData();
        }

    });
}

/**
 * spreadjs相关初始化
 *
 * @return {void}
 */
function spreadInit() {
    if(projectGLJSheet&&projectGLJSpread){
        projectGLJSheet.spread.destroy();
    }
    projectGLJSpread = new ProjectGLJSpread();
    projectGLJSpread.successCallback = successTrigger;
    projectGLJSheet = projectGLJSpread.init();

    // 绑定单击事件
    let lastRow = 0;
    projectGLJSheet.bind(GC.Spread.Sheets.Events.CellClick, function (element, info) {
        let currentRow = info.row;
        if (currentRow === undefined || currentRow === lastRow) {
            return;
        }
        if (currentTag !== 'mix-ratio' && currentTag !== 'machine') {
            return;
        }

        let spread = currentTag === 'mix-ratio' ? mixRatioSpread : machineSpread;
        if (spread === null) {
            return;
        }
        let projectGLJId = projectGLJSheet.getActiveDataByField('id');
        spread.getRatioData(projectGLJId);

        lastRow = currentRow;
    });

    if(currentTag){
        if (currentTag === 'ration') {
            projectGLJSheet.filterData('unit_price.type', []);
        }
        if(currentTag === "mix-ratio"){
            projectGLJSheet.filterData('unit_price.type', [GLJTypeConst.CONCRETE, GLJTypeConst.MORTAR, GLJTypeConst.MIX_RATIO,GLJTypeConst.MAIN_MATERIAL]);
        }
        if(currentTag === "machine"){
            projectGLJSheet.filterData('unit_price.type', [GLJTypeConst.GENERAL_MACHINE]);
        }
    }

  /*  // 切换tab触发refresh
    $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
        if($(e.target).data('name')==undefined){
            return;
        }
        currentTag = $(e.target).data('name');
        if (currentTag === 'ration') {
            projectGLJSheet.filterData('unit_price.type', []);
        }
    });*/

  /*  loadSize("glj-main", function () {
        projectGLJSpread.sheetObj.spread.refresh();
    });*/
}

/**
 * 单价文件相关初始化
 *
 * @param {String} name
 * @param {Array} data
 * @return {void}
 */
function unitPriceFileInit() {
    let projectGLJ = projectObj.project.projectGLJ;
    let data = projectGLJ.datas;
    usedTenderList = data.usedTenderList !== undefined ? data.usedTenderList : [];
    usedUnitPriceInfo = data.constData.usedUnitPriceInfo !== undefined ?
        data.constData.usedUnitPriceInfo : {};
    $("#used-name").text(usedUnitPriceInfo.name);
    let usedCount = usedTenderList.length <= 0 ? 1 : usedTenderList.length;
    $("#used-count").text(usedCount);
}

function getUsedTenderInfo() {
    return usedTenderList.join("<br>");
}

/**
 * 成功事件
 *
 * @param {string} field
 * @param {object} info
 * @return {void}
 */
function successTrigger(field, info,id) {
    let updateData = {};
    switch (field) {
        case 'unit_price.market_price':
            // 计算价格
            updateData = projectGLJSpread.priceCalculate(info);

            // 触发websocket通知
            socket.emit('dataNotify', JSON.stringify(info));
            break;
        case 'supply':
            // 供货方式更改成功后
            projectGLJSpread.changeSupplyType(info);
            break;
        case 'is_evaluate':
            projectObj.project.projectGLJ.changeIsEvaluate(id);
            break;
    }
    // 重新加载数据到缓存
    projectObj.project.projectGLJ.loadData(function () {
        projectObj.project.projectGLJ.loadCacheData();
        $.bootstrapLoading.end();
    });

    // 更新定额工料机
    gljOprObj.refreshView();
}

//过滤消耗量为0的项目工料机
function filterProjectGLJ(jsonData) {
    if (jsonData.length > 0) {
        // 不显示消耗量为0的数据
        jsonData= _.filter(jsonData,function (item) {
            return item.quantity !== 0 && item.quantity !== '0'
        })
    }
    return jsonData;
}


function sortProjectGLJ(jsonData) {
    if (jsonData.length > 0) {
        jsonData = _.sortByAll(jsonData, [function (item) {
            return _.indexOf(gljTypeSeq,item.unit_price.type);
        }, 'code']);
    }
    return jsonData
}