/**
 * 工料机汇总相关
 *
 * @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 usedUnitPriceInfo = {};
let otherFileData = {};
let currentTag = '';
let isChanging = false;
$(document).ready(function () {
    $('#tab_gongliaoji').on('shown.bs.tab', function (e) {
        init();
    });

    // 单价文件切换弹框
    $('#change-dj').on('shown.bs.modal', function () {
        // 获取当前建设项数据
        let projectName = projectInfoObj.projectInfo.fullFolder !== undefined &&
            projectInfoObj.projectInfo.fullFolder.length > 0 ? projectInfoObj.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);
                }
            }
        });
    });

    // 从其他建设项目中复制 选择建设项目
    $("#other-project").change(function() {
        let projectId = $(this).val();
        if (otherFileData[projectId] === undefined) {
            return false;
        }
        let otherFileHtml = '';
        for(let unitPrice of otherFileData[projectId]) {
            otherFileHtml += '<option value="'+ unitPrice.id +'">'+ unitPrice.name +'</option>';
        }
        $("#other-file").html(otherFileHtml);
    });

    // 单价文件选项切换
    $("input[name='change-type']").change(function() {
        let type = $(this).val();
        type = parseInt(type);
        $("#change-dj .option").hide();
        if (type === 0) {
            $(".option.select").show();
        } else {
            $(".option.copy").show();
        }
    });

    // 单价文件切换确认
    $("#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();
        }
        $.ajax({
            url: '/glj/change-file',
            type: 'post',
            data: {project_id: scUrlUtil.GetQueryString('project'), change_id: changeUnitPriceId},
            error: function() {
                isChanging = false;
            },
            beforeSend: function() {
                isChanging = true;
            },
            success: function(response) {
                isChanging = false;
                if (response.err === 1) {
                    let msg = response.msg !== undefined ? response.msg : '未知错误';
                    alert(msg);
                    return false;
                }
                $('#change-dj').modal("hide");
            }
        });
    });

    // 是否主动更改数据
    // $("#message").on('click', '#load-data', function() {
    //     $("#notify").slideUp('fast');
    //     if (changeInfo.length > 0) {
    //         for (let index in changeInfo) {
    //             let cell = gljSheet.getCell(changeInfo[index].row, changeInfo[index].col, GC.Spread.Sheets.SheetArea.viewport);
    //             cell.value(changeInfo[index].newValue);
    //         }
    //     }
    //     changeInfo = [];
    // });
});

/**
 * 初始化数据
 *
 * @return {void}
 */
function init() {
    // 加载工料机数据
    $.ajax({
        url: '/glj/getData',
        type: 'post',
        dataType: 'json',
        data: {project_id: scUrlUtil.GetQueryString('project')},
        error: function() {
            // alert('数据传输错误');
        },
        beforeSend: function() {

        },
        success: function(response) {
            if (response.err === 1) {
                let msg = response.msg !== undefined && response.msg !== '' ? response.msg : '读取工料机数据失败!';
                alert(msg);
                return false;
            }
            let data = response.data;
            // 赋值
            jsonData = data.gljList !== undefined && data.gljList.length > 0 ? data.gljList : [];
            mixRatioConnectData = data.mixRatioConnectData !== undefined ? data.mixRatioConnectData : mixRatioConnectData;

            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;

            let usedTenderList = data.usedTenderList !== undefined ? data.usedTenderList : [];
            usedUnitPriceInfo = data.constData.usedUnitPriceInfo !== undefined ?
                data.constData.usedUnitPriceInfo : {};
            // 存入缓存
            projectObj.project.projectGLJ.datas = jsonData;

            spreadInit();
            unitPriceFileInit(usedUnitPriceInfo.name, usedTenderList);
        }
    });

}

/**
 * spreadjs相关初始化
 *
 * @return {void}
 */
function spreadInit() {
    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;
    });

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

/**
 * 单价文件相关初始化
 *
 * @param {String} name
 * @param {Array} data
 * @return {void}
 */
function unitPriceFileInit(name, data) {
    $("#used-name").text(name);
    let usedCount = data.length <= 0 ? 1 : data.length;
    $("#used-count").text(usedCount);
    $('#pop-dj').popover({
            placement:"bottom",
            html:true,
            trigger:"hover | focus",
            content: data.join('<br>')
        }
    );
}

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

            // 触发websocket通知
            socket.emit('dataNotify', JSON.stringify(info));
            break;
    }
}