let dataList = {};
let selectRows = [];
let categoryAgGridData = [];
let categoryTotalCount   = 0;
let categoryTotalPages   = 0;
let categoryId   = '';
/****************************************************************************
 * 카테고리 구분 리스트 조회
 ****************************************************************************/
function fn_selectCategoryList(){
    let formData = new FormData();
    formData.append("menuClass", menuClass);

    $.ajax({
        url: encodeURI('/webcategory/selectCategoryList.do'),
        data: formData,
        dataType: "json",
        processData: false,
        contentType: false,
        type: 'POST',
        async: true,
        success: function(data){
            if('0'==data.msgCode){
                let listHTML = '';

                if(0<data.rows.length){
                    for(let i = 0; i < data.rows.length; i++){
                        let categoryCode     = data.rows[i].categoryCode;
                        let categoryName     = data.rows[i].categoryName;

                        listHTML += `<li class="option_list_item" id="${categoryCode}">${categoryName}</li>`;
                    }
                    document.getElementById('categoryList').innerHTML = listHTML;
                    if(categoryId){
                        $("#categoryList #"+categoryId).click();
                    }else{
                        document.getElementById('categoryList').querySelector('li:first-child').click();
                    }
                }
            }
            else{
                modalEvent.danger("조회 오류", data.msgDesc);
            }
        },
        error : function(xhr, status, error) {
            modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
        },
        beforeSend:function(){

        },
        complete:function(){

        }
    });
}
/****************************************************************************
 * 기타설정 정보 리스트 조회
 ****************************************************************************/
function fn_selectCategoryItemList() {
    let formData = new FormData();
    formData.append("menuClass", menuClass);

    $.ajax({
        url: encodeURI('/webcategory/selectCategoryItemList.do'),
        data: formData,
        dataType: "json",
        processData: false,
        contentType: false,
        type: 'POST',
        async: false,
        success: function (data) {
            if ('0' == data.msgCode) {
                dataList={};
                if (0 < Object.keys(data.rows).length) {
                    Object.keys(data.rows).forEach(key => {
                        dataList[key]=data.rows[key];
                    });
                }
            } else {
                modalEvent.danger("조회 오류", data.msgDesc);
            }
        },
        error: function (xhr, status, error) {
            modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
        },
        beforeSend: function () {
        },
        complete: function () {
        },
    });
}
function fileCellRenderer(params) {
    if(params.value){
        let imgSrc = params.value;
        return `<img src="${imgSrc}" alt=${params.data.originalFileName}>`;
    }
}
let categoryColumnDefs = [
    {
        field: "checkbox",
        headerName: "",
        minWidth: 55,
        maxWidth: 55,
        headerCheckboxSelection: true,
        checkboxSelection: true
    },
    {field: "orderNumber", headerName: "번호", minWidth: 60, cellStyle: {cursor: 'pointer',textAlign: 'center'}},
    {field: "categoryName", headerName: "카테고리명", minWidth: 200, maxWidth: 200},
    {field: "categoryItemName", headerName: "구분", minWidth: 200, maxWidth: 200},
    {field: "filePath", headerName: "파일", minWidth: 300, maxWidth: 300, cellRenderer: fileCellRenderer},
    {field: "originalFileName",hide: true },
    {field: "etc", headerName: "메모", minWidth:763},
];
// let the grid know which columns and what data to use
let categoryGridOptions = {
    suppressRowTransform: true,
    columnDefs: categoryColumnDefs,
    defaultColDef: {		// 리스트 기본 설정
        flex: 1,
        sortable: true,		//정렬 여부
        resizable: true,	//리사이즈
        editable: false,		// 그리드에서 데이터 수정
        cellStyle: {textAlign: 'left', fontSize: '14px', padding: '0'},
        //suppressSizeToFit:true,		//자동 맞춤
        //enableRowGroup: true,		// 그룹 묶음
        enablePivot: true,
        enableValue: true
    },
    //suppressMultiSort:true,  //단일솔트 true가 단일, false가 다중 shift + sort 시
    headerHeight: 41, // header 높이
    rowHeight: 41, // row 높이
    rowData: categoryAgGridData,
    suppressRowClickSelection: true, // 로우 클릭시 체크박스 선택 true no, false yes
    localeText: {
        noRowsToShow: '조회 결과가 없습니다.'
    }, //데이터 없을 시 나오는 문구
    rowSelection: 'multiple', // row 다중 선택
    debug: false,
    onCellClicked: function (event) { //셀 클릭 이벤트
        fn_updateCategoryPopup(event.data);
    },
    onSelectionChanged: function (event) { //체크박스 선택
        selectRows = event.api.getSelectedRows();
    },
    onSortChanged: function (event) {
        //정렬
        categorySort = ''; //기존 정렬 초기화
        let columnArr = event.columnApi.getColumnState();
        if (0 < columnArr.length) {

            //sort index 순으로 재정렬
            columnArr.sort(function (a, b) {
                return a.sortIndex - b.sortIndex;
            });

            let nullCnt = 0;
            for (let i = 0; i < columnArr.length; i++) {
                let gridSortModel = columnArr[i].colId;
                let gridSort = columnArr[i].sort;

                if (gridSort != null) {
                    categoryStart = 0;

                    categorySort += gridSortModel + ' ' + gridSort + ',';

                } else {
                    nullCnt++;

                    if (nullCnt == columnArr.length) {
                        categorySort = '';
                        // userDir = '';

                        categoryStart = 0;
                    }
                }
            }
        }

        categorySort = categorySort.substring(0, categorySort.lastIndexOf(",")); //맨끝 콤마 지우기

        fn_selectCategoryItemList();
    }
};
let categoryGridDiv = document.querySelector('#categoryItemGrid');

new agGrid.Grid(categoryGridDiv, categoryGridOptions);

/****************************************************************************
 * 카테고리 페이징 처리
 ****************************************************************************/
function fn_categoryPagination(param){
    categoryStart = (parseInt(param)-1)*categoryLimit;
    fn_selectCategoryItemList();
}
/****************************************************************************
 * 카테고리 삭제
 ****************************************************************************/
function fn_deleteCategory(param){
    if("Y"!=deleteUseYn){
        modalEvent.warning("", "삭제 권한이 없습니다.");
        return false;
    }

    if(!param.length){
        modalEvent.warning("", "삭제할 대상 정보가 없습니다.");
        return false;
    }

    modalEvent.info("삭제", "선택한 조직 정보를 삭제하시겠습니까?", function(){
        let formData = new FormData();
        formData.append("menuClass", menuClass);
        formData.append("deleteDataList", JSON.stringify(param));

        $.ajax({
            url: encodeURI('/webcategory/deleteHospitalOther.do'),
            data: formData,
            dataType: "json",
            processData: false,
            contentType: false,
            type: 'POST',
            async: true,
            success: function(data){
                if('0'==data.msgCode){
                    selectRows = []
                    modalEvent.success("삭제 성공", data.msgDesc, function(){
                        fn_groupOk();
                    });
                }
                else{
                    modalEvent.danger("삭제 오류", data.msgDesc);
                }
            },
            error : function(xhr, status, error) {
                modalEvent.danger("삭제 오류", "삭제 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
            },
            beforeSend:function(){

            },
            complete:function(){

            }
        });
    });
}
/****************************************************************************
 * 옵션선택
 ****************************************************************************/
function fn_OptionSelection(target,e) {
    // 옵션 선택 이벤트 핸들러

    let  selectedOption= $(target).text();
    let  param= $(target).prop('id');
    $(target).parent().siblings("button").text(selectedOption);

    // $(target).closest('.select_box').find('.option_list_item').removeClass('selected');
    // $(target).addClass('selected');
    // $(target).closest('.select_option_list').hide();
    // e.stopPropagation();
    if('categoryList'===$(target).closest('ul').attr('id')) {
        // $("#groupItemList").append(dataList[target.attr('id')]);
        fn_categoryPaginReset();
        categoryGridOptions.api.setRowData();

        categoryId = target.attr('id');
        categoryAgGridData = dataList[categoryId]

        categoryTotalCount = dataList[target.attr('id')]?.length;
        categoryTotalPages = Math.ceil(categoryTotalCount / categoryLimit);

        if (0 < categoryTotalCount) {
            fn_setCategoryData(categoryStart);
            // 페이징 처리
            window.pagObj = $('#categoryPagination').twbsPagination({
                startPage: ((categoryStart / categoryLimit) + 1),
                totalPages: (categoryTotalPages == 0) ? 1 : categoryTotalPages,
                visiblePages: 10,
                initiateStartPageClick: false,
                prev: '<img src="/image/web/page_navigation_arrow.svg" alt="prev">',
                next: '<img src="/image/web/page_navigation_arrow.svg" alt="next">',
                first: '',
                last: '',
                onPageClick: function (event, page) {
                    categoryStart = (parseInt(page)-1)*categoryLimit;
                    fn_setCategoryData();
                }
            }).on('page', function (event, page) {
            });

        }
    }
}
/****************************************************************************
 * 페이징 리셋
 ****************************************************************************/
function fn_categoryPaginReset(){
    categoryStart                   = 0;
    categoryLimit                   = 15;
    categoryTotalCount              = 0;
    categoryTotalPages              = 0;
    categorySort                    = '';

    //페이징 초기화
    if($("#categoryPagination").data("twbs-pagination")){
        $("#categoryPagination").twbsPagination("destroy");
    }
}
function fn_setCategoryData(){
    categoryGridOptions.api.setRowData(categoryAgGridData.slice(categoryStart, categoryStart+categoryLimit));
}
/****************************************************************************
 * select box 선택 이벤트
 ****************************************************************************/
function fn_clickSelectBox(target) {
    $(target).find('.select_option_list').toggle();
}

function fn_clickEvent() {
    // $('.select_box').off('click');
    // //$(document).off('click');
    //
    // $('.select_box').on('click', function () {
    //     fn_clickSelectBox($(this));
    //     $('.select_box').not(this).find('.select_option_list').hide();
    // });
    // 옵션 선택 이벤트
    $('.select_box').on('click', 'li', function (e) {
        fn_OptionSelection($(this), e);
    });

// 다른 곳을 클릭했을 때 옵션 숨기기
//     $(document).on('click', function (event) {
//         if (!$(event.target).closest('.select_box').length) {
//             $('.select_option_list').hide();
//         }
//     });
}

/****************************************************************************
 * 완료
 ****************************************************************************/
function fn_groupOk(){
    fn_selectCategoryItemList();
    fn_selectCategoryList();
}

function fn_insertGroupPopup(){
    if("Y"!=insertUseYn){
        modalEvent.warning("", "등록 권한이 없습니다.");
        return false;
    }

    let reqParam =  {};
    categoryInsertModal.popup(function(obj, reqParam) {
        fn_groupOk();
    }, reqParam);
}

function fn_updateCategoryPopup(param){
    if("Y"!=updateUseYn){
        modalEvent.warning("", "수정 권한이 없습니다.");
        return false;
    }
    categoryUpdateModal.popup(function(obj, param) {
        fn_groupOk();
    }, param);
}

/****************************************************************************
 * 페이지 init
 ****************************************************************************/
function fn_pageInit(){
    fn_selectCategoryItemList();
    fn_selectCategoryList();
}

/****************************************************************************
 * 페이지 event
 ****************************************************************************/
function fn_pageEvent(){
    fn_clickEvent();
    // 조직설정 - 조직 등록 버튼
    $("#btnInsertCategory").click(function () {
        fn_insertGroupPopup();
    });
    $("#btnDeleteCategory").click(function () {
        fn_deleteCategory(selectRows);
    });
}

$(function(){
    // 페이지 init
    fn_pageInit();

    // 페이지 event
    fn_pageEvent();
});