'use strict';
/**
 * 台账搜索相关(多个页面均使用:台账分解、台账审批、台账修订)
 *
 * 搜索基于spreadjs,请放在gc.spread.sheets.all.10.0.1.min.js/spreadjs_zh.js之后
 *
 * @author Mai
 * @date
 * @version
 */
(function($){
    $.posSearch = function (setting) {
        if (!setting.selector || !setting.searchSpread) return;
        const searchHtml =
            '                                
\n';
        $(setting.selector).html(searchHtml);
        const sheet = setting.searchSpread.getActiveSheet();
        const searchObj = (function () {
            let resultArr = [];
            const search = function (keyword) {
                if (keyword && keyword !== '') {
                    resultArr = [];
                    const sortData = sheet.zh_data;
                    if (sortData) {
                        for (let i = 0, iLength = sortData.length; i < iLength; i++) {
                            const sd = sortData[i];
                            if (sd.name && sd.name.indexOf(keyword) > -1) {
                                resultArr.push({index: i, data: sd});
                            }
                        }
                    }
                } else {
                    resultArr = [];
                }
                $('#pos-search-hint').html('结果:' + resultArr.length);
            };
            const searchAndLocate = function (keyword) {
                search(keyword);
                if (resultArr.length > 0) {
                    const sel = sheet.getSelections()[0];
                    const curRow = sel ? sel.row : 0;
                    const pos = resultArr[0];
                    if (pos.index !== curRow) {
                        sheet.setSelection(pos.index, sel ? sel.col : 0, 1, 1);
                        sheet.showRow(pos.index, spreadNS.VerticalPosition.center);
                    }
                }
            };
            const locateNext = function () {
                if (resultArr.length > 0) {
                    const sel = sheet.getSelections()[0];
                    const curRow = sel ? sel.row : 0;
                    let next = _.find(resultArr, function (d) {
                        return d.index > curRow;
                    });
                    if (!next) next = resultArr[0];
                    if (next.index !== curRow) {
                        sheet.setSelection(next.index, sel ? sel.col : 0, 1, 1);
                        sheet.showRow(next.index, spreadNS.VerticalPosition.center);
                    }
                }
            };
            const locatePre = function () {
                if (resultArr.length > 0) {
                    const sel = sheet.getSelections()[0];
                    const curRow = sel ? sel.row : 0;
                    let next = _.findLast(resultArr, function (d) {
                        return d.index < curRow;
                    });
                    if (!next) next = resultArr[resultArr.length - 1];
                    if (next.index !== curRow) {
                        sheet.setSelection(next.index, sel ? sel.col : 0, 1, 1);
                        sheet.showRow(next.index, spreadNS.VerticalPosition.center);
                    }
                }
            };
            return {search, searchAndLocate, locateNext, locatePre};
        })();
        // $('#pos-keyword').bind('input propertychange', function () {
        //     posSearch.search(this.value);
        // });
        $('#pos-keyword').bind('keydown', function(e){
            if (e.keyCode == 13) searchObj.searchAndLocate(this.value);
        });
        $('#search-pre-pos').click(function () {
            searchObj.locatePre();
        });
        $('#search-next-pos').click(function () {
            searchObj.locateNext();
        });
        return searchObj;
    }
    $.billsSearch = function (setting) {
        if (!setting.selector || !setting.searchSpread || !setting.resultSpreadSetting) return;
        const resultId = setting.id + '-search-result';
        const obj = $(setting.selector);
        obj.html(
            '                        \n' +
            '                        \n' +
            '                        
'
        );
        autoFlashHeight();
        const resultSpread = SpreadJsObj.createNewSpread($('#' + resultId)[0]);
        SpreadJsObj.initSheet(resultSpread.getActiveSheet(), setting.resultSpreadSetting);
        SpreadJsObj.forbiddenSpreadContextMenu('#' + resultId, resultSpread);
        const searchSheet = setting.searchSpread.getActiveSheet();
        let searchResult = [];
        const searchBills = function () {
            const keyword = $('input', obj).val();
            searchResult = [];
            const sortData = SpreadJsObj.getSortData(searchSheet);
            for (const node of sortData) {
                if ((node.code && node.code.indexOf(keyword) > -1) ||
                    node.b_code && node.b_code.indexOf(keyword) > -1 ||
                    node.name && node.name.indexOf(keyword) > -1) {
                    const data = JSON.parse(JSON.stringify(node));
                    data.visible = true;
                    searchResult.push(data);
                }
            }
            SpreadJsObj.loadSheetData(resultSpread.getActiveSheet(), 'data', searchResult);
        };
        $('input', this.obj).bind('keydown', function (e) {
            if (e.keyCode == 13) searchBills();
        });
        $('button', this.obj).bind('click', () => {searchBills()});
        resultSpread.getActiveSheet().bind(spreadNS.Events.CellDoubleClick, function (e, info) {
            const sheet = info.sheet;
            const data = sheet.zh_data;
            if (!data) { return }
            const curBills = data[info.row];
            if (!curBills) { return }
            SpreadJsObj.locateTreeNode(searchSheet, curBills.ledger_id, true);
            if (setting.afterLocated) {
                setting.afterLocated();
            }
        });
        return {spread: resultSpread};
    }
})(jQuery);