/*
 * 공통 UTIL 함수
 */
 
var _jxcelEactiveCustom = {
    getEaColumnIndex : function (columnName) {
        const columns = this.options.columns;
        for (var i = 0; i < columns.length; i++) {
            const column = columns[i];
            if (column.name == columnName) {
                return i;
            }
        }
    }, 
    getEaColumnName : function (index) {
        var column = this.options.columns[index];
        return column.name;
    },
    getEaCellValue : function (row, columnName) {
        const col = this.getEaColumnIndex(columnName);
        const cellId = jexcel.getColumnNameFromId([col, row]);
        return this.getValue(cellId);
    },
    eaClearData : function () {
        this.setData([{}]);
        return this;
    },
    eaAutoResize : function (div_id) {
        // window에 resize 이벤트를 바인딩 한다.
        const _grid = this;
        $(window).bind('resize', function() {
            var totalWidth = $('#' + div_id).width();
            var columns = _grid.options.columns;
            /* 
             * 윈도우 사이즈가 1150일 경우 작은 minWidth로 지정
             */
            var smallWindow = totalWidth < 1150;

            for (var i = 0; i < columns.length; i++) {
                var column = columns[i];
                if (smallWindow && Number.isInteger(column.minWidth)) {
                    _grid.setWidth(i, column.minWidth);
                } else if (!smallWindow) {
                    _grid.setWidth(i, column.maxWidth);
                }
            }

            // 번호 컬럼 길이 50 기본 설정
            var othersWidth = 50;
            var resizeColumnCount = 0;
            for (var i = 0; i < columns.length; i++) {
                var column = columns[i];
                if (column.type == 'hidden') {
                    continue;
                }
                if (!column.resize && Number.isInteger(column.width)) {
                    // 가변 컬럼이 아닌 경우
                    othersWidth += column.width;
                } else {
                    // 컬럼길이가 가변으로 정해 진 경우
                    resizeColumnCount++;
                }
            }

            if (resizeColumnCount == 0) {
                return;
            }

            // 가변 컬럼의 길이는 전체 넓이에 나머지 컬럼의 길이를 뺀 후 가변 컬럼의 수로 나눈 값이 된다. 
            var resizeColumnWidth = (totalWidth - othersWidth) / resizeColumnCount;
            for (var i = 0; i < columns.length; i++) {
                var column = columns[i];
                if (column.resize) {
                    if (resizeColumnWidth < column.minWidth) {
                        _grid.setWidth(i, column.minWidth);
                    } else {
                        _grid.setWidth(i, resizeColumnWidth);
                    }
                } else {
                    if (smallWindow && Number.isInteger(column.minWidth)) {
                        _grid.setWidth(i, column.minWidth);
                    } else if (!smallWindow) {
                        _grid.setWidth(i, column.width);
                    }
                }
            }

            var gridTotalWidth = 0;
            for (var i = 0; i < columns.length; i++) {
                var column = columns[i];
                gridTotalWidth += column.width;
            }
        }).trigger('resize');
        return _grid;
    }, 
    setEaRowData : function (index, rowData) {
        try {
            var gridData = this.getJson()
            gridData[index] = rowData;
            this.setData(gridData);
        } catch (e) {
            console.log('setEaRowData error : ' + e);
        }
    }
}

function JexcelEactiveCustom(element, options) {
    var _jexcel = jexcel(element, options);
    $.extend(_jexcel, _jxcelEactiveCustom);
    return _jexcel;
}
