/* 페이징 관련 변수 */
let webTreatmentPetitTotalCount = 0;
let webTreatmentPetitTotalPages = 0;

/*aggird*/
let webTreatmentPetitAgGridData = [];

let delList = [];

/****************************************************************************
 * 이벤트 정보 리스트 조회
 ****************************************************************************/
function fn_selectListWebTreatmentPetitJson() {
    let formData = new FormData();
    formData.append("menuClass", menuClass);
    formData.append("categoryDivCd", categoryDivCd);
    formData.append("searchCategoryNo", webTreatmentPetitSearchKeywordParam0);
    formData.append("title", webTreatmentPetitSearchKeywordParam1);
    formData.append("webTreatmentPetitSort", webTreatmentPetitSort);
    formData.append("webTreatmentPetitDir", webTreatmentPetitDir);
    formData.append("webTreatmentPetitStart", webTreatmentPetitStart);
    formData.append("webTreatmentPetitLimit", webTreatmentPetitLimit);

    $.ajax({
        url: encodeURI('/contentsBbs/getContentsBbsList.do'),
        data: formData,
        dataType: "json",
        processData: false,
        contentType: false,
        type: 'POST',
        async: true,
        success: function (data) {
            if ('0' == data.msgCode) {
                // 페이징 처리
                webTreatmentPetitTotalCount = data.totalCount;

                webTreatmentPetitTotalPages = Math.ceil(webTreatmentPetitTotalCount / webTreatmentPetitLimit);

                // 리스트 조회
                webTreatmentPetitAgGridData = data.rows;
                webTreatmentPetitGridOptions.api.setRowData(webTreatmentPetitAgGridData);

                if (0 < data.rows.length) {
                    //페이징 처리
                    window.pagObj = $('#webTreatmentPetitPagination').twbsPagination({
                        startPage: ((webTreatmentPetitStart / webTreatmentPetitLimit) + 1),
                        totalPages: (webTreatmentPetitTotalPages == 0) ? 1 : webTreatmentPetitTotalPages,
                        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 (treatmentpetit, page) {
                            fn_webTreatmentPetitPagination(page);
                        }
                    }).on('page', function (treatmentpetit, page) {
                    });
                }
            }
            else {
                modalEvent.danger("조회 오류", data.msgDesc);
            }
        },
        error: function (xhr, status, error) {
            modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
        },
        beforeSend: function () {
            // 로딩열기
            webTreatmentPetitGridOptions.api.showLoadingOverlay();
        },
        complete: function () {

        }
    });
}

/****************************************************************************
 * 검색하기
 ****************************************************************************/
function fn_webTreatmentPetitSearch(param) {
    if ("A" != param && "Y" != selectUseYn) {
        modalEvent.warning("", "조회 권한이 없습니다.");
        return false;
    }

    fn_webTreatmentPetitPaginReset();

    webTreatmentPetitSearchKeywordParam0 = $("#webTreatmentPetitSearchKeyword0").val();
    webTreatmentPetitSearchKeywordParam1 = $("#webTreatmentPetitSearchKeyword1").val();

    fn_selectListWebTreatmentPetitJson();
}

/****************************************************************************
 * 페이징 처리
 ****************************************************************************/
function fn_webTreatmentPetitPagination(param) {
    webTreatmentPetitStart = (parseInt(param) - 1) * webTreatmentPetitLimit;

    fn_selectListWebTreatmentPetitJson();
}

/****************************************************************************
 * 페이징 리셋
 ****************************************************************************/
function fn_webTreatmentPetitPaginReset() {
    webTreatmentPetitSearchKeywordParam0 = '';
    webTreatmentPetitSearchKeywordParam1 = '';

    webTreatmentPetitStart = 0;
    webTreatmentPetitLimit = 100;
    webTreatmentPetitTotalCount = 0;
    webTreatmentPetitTotalPages = 0;

    //페이징 초기화
    if ($("#webTreatmentPetitPagination").data("twbs-pagination")) {
        $("#webTreatmentPetitPagination").twbsPagination("destroy");
    }
}

/****************************************************************************
 * 이벤트 삭제
 ****************************************************************************/
function fn_deleteWebTreatmentPetit() {
    if ("Y" != deleteUseYn) {
        modalEvent.warning("", "삭제 권한이 없습니다.");
        return false;
    }

    if (!delList) {
        modalEvent.warning("", "삭제할 대상을 선택하세요.");
        return false;
    }

    modalEvent.info("삭제", "선택한 이벤트 정보를 삭제하시겠습니까?", function () {
        let data = {
            menuClass: menuClass,
            categoryDivCd: categoryDivCd,
            delList: delList
        };

        $.ajax({
            url: encodeURI('/contentsBbs/delContentsBbs.do'),
            data: JSON.stringify(data),
            dataType: "json",
            contentType: 'application/json; charset=utf-8',
            type: 'POST',
            async: true,
            success: function (data) {
                if ('0' == data.msgCode) {
                    modalEvent.success("삭제 성공", data.msgDesc, function () {
                        fn_webTreatmentPetitSearch("A");
                    });
                }
                else {
                    modalEvent.danger("삭제 오류", data.msgDesc);
                }
            },
            error: function (xhr, status, error) {
                modalEvent.danger("삭제 오류", "삭제 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
            }
        });
    });
}

/****************************************************************************
 * 출력순서 저장
 ****************************************************************************/
function fn_saveOrdNo() {
    if ("Y" != updateUseYn) {
        modalEvent.warning("", "수정 권한이 없습니다.");
        return false;
    }

    let orderList = [];
    let totalRows = webTreatmentPetitGridOptions.api.getDisplayedRowCount();

    for (let i = 0; i < totalRows; i++) {
        let rowNode = webTreatmentPetitGridOptions.api.getDisplayedRowAtIndex(i);
        orderList.push({
            categoryNo: rowNode.data.categoryNo,
            postNo: rowNode.data.postNo,
            ordNo: totalRows - i  // 상단이 큰 값 (DESC 정렬)
        });
    }

    modalEvent.info("순서저장", "변경된 출력순서를 저장하시겠습니까?", function () {
        let data = {
            menuClass: menuClass,
            categoryDivCd: categoryDivCd,
            orderList: orderList
        };

        $.ajax({
            url: encodeURI('/contentsBbs/updateOrdNo.do'),
            data: JSON.stringify(data),
            dataType: "json",
            contentType: 'application/json; charset=utf-8',
            type: 'POST',
            async: true,
            success: function (data) {
                if ('0' == data.msgCode) {
                    modalEvent.success("순서저장 성공", data.msgDesc, function () {
                        $("#btnSaveOrdNo").prop("disabled", true).css("opacity", "0.5");
                        fn_selectListWebTreatmentPetitJson();
                    });
                } else {
                    modalEvent.danger("순서저장 오류", data.msgDesc);
                }
            },
            error: function (xhr, status, error) {
                modalEvent.danger("순서저장 오류", "순서 저장 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
            }
        });
    });
}

/****************************************************************************
 * 검색 엔터 이벤트
 ****************************************************************************/
function fn_webTreatmentPetitEnter(e) {
    if (e.which) {
        if (13 == e.which) {
            fn_webTreatmentPetitSearch();
        }
    }
    else {
        if (13 == e.keyCode) {
            fn_webTreatmentPetitSearch();
        }
    }
}

/****************************************************************************
 * 등록 화면으로 이동.
 ****************************************************************************/
function fn_insertWebTreatmentPetitIntro() {
    if ("Y" == insertUseYn) {
        let pagingParam = "?menuClass=" + menuClass;
        pagingParam += "&categoryDivCd=" + categoryDivCd;
        fn_leftFormAction("/contentsBbs/moveRegContentsBbs.do" + pagingParam);
    } else {
        modalEvent.warning("", "등록 권한이 없습니다.");
        return false;
    }

}

/****************************************************************************
 * 수정 화면으로 이동.
 ****************************************************************************/
function fn_updateWebTreatmentPetitIntro(postNo, categoryNo) {
    if ("Y" == updateUseYn) {
        let pagingParam = "?menuClass=" + menuClass;
        pagingParam += "&categoryDivCd=" + categoryDivCd;
        pagingParam += "&postNo=" + postNo;
        pagingParam += "&categoryNo=" + categoryNo;
        fn_leftFormAction("/contentsBbs/moveContentsBbs.do" + pagingParam);
    } else {
        modalEvent.warning("", "수정 권한이 없습니다.");
        return false;
    }
}


let webTreatmentPetitColumnDefs = [
    { field: "checkbox", headerName: "", minWidth: 55, maxWidth: 55, rowDrag: true, headerCheckboxSelection: true, checkboxSelection: true },
    { field: "rowNum", headerName: "번호", minWidth: 60, maxWidth: 60, sortable: false, cellStyle: { textAlign: 'center' } },
    { field: "categoryNm", headerName: "카테고리", minWidth: 120, maxWidth: 130, cellStyle: { textAlign: 'center' } },
    { field: "title", headerName: "제목", minWidth: 150, cellStyle: { cursor: 'pointer', color: '#3985EA' } },
    { field: "content", headerName: "내용요약", minWidth: 150 },
    { field: "hashtag", headerName: "해시태그", minWidth: 150 },
    { field: "regDt", headerName: "등록일", minWidth: 100, maxWidth: 120, cellStyle: { textAlign: 'center' } },
    { field: "regNm", headerName: "작성자", minWidth: 100, maxWidth: 120, cellStyle: { textAlign: 'center' } },
];

if (categoryDivCd === '02' || categoryDivCd === '04') {
    webTreatmentPetitColumnDefs = [
        { field: "checkbox", headerName: "", minWidth: 55, maxWidth: 55, rowDrag: true, headerCheckboxSelection: true, checkboxSelection: true },
        { field: "rowNum", headerName: "번호", minWidth: 60, maxWidth: 60, sortable: false, cellStyle: { textAlign: 'center' } },
        { field: "categoryNm", headerName: "카테고리", minWidth: 120, maxWidth: 130, cellStyle: { textAlign: 'center' } },
        { field: "title", headerName: "제목", minWidth: 150, cellStyle: { cursor: 'pointer', color: '#3985EA' } },
        { field: "content", headerName: "내용요약", minWidth: 150 },
        { field: "startDt", headerName: "시작일", minWidth: 100, maxWidth: 120, cellStyle: { textAlign: 'center' } },
        { field: "endDt", headerName: "종료일", minWidth: 100, maxWidth: 120, cellStyle: { textAlign: 'center' } },
        { field: "hashtag", headerName: "해시태그", minWidth: 150 },
        { field: "regDt", headerName: "등록일", minWidth: 100, maxWidth: 120, cellStyle: { textAlign: 'center' } },
        { field: "regNm", headerName: "작성자", minWidth: 100, maxWidth: 120, cellStyle: { textAlign: 'center' } },
    ];
}

// let the grid know which columns and what data to use
let webTreatmentPetitGridOptions = {
    suppressRowTransform: true,
    rowDragManaged: true,
    animateRows: true,
    columnDefs: webTreatmentPetitColumnDefs,
    defaultColDef: {		// 리스트 기본 설정
        flex: 1,
        sortable: true,		//정렬 여부
        resizable: true,	//리사이즈
        editable: true,	// 그리드에서 데이터 수정
        cellStyle: { textAlign: 'left', fontSize: '14px', padding: '0' },
        enablePivot: true,
        enableValue: true
    },
    headerHeight: 41, // header 높이
    rowHeight: 41, // row 높이
    rowData: webTreatmentPetitAgGridData,
    suppressRowClickSelection: true, // 로우 클릭시 체크박스 선택 true no, false yes
    localeText: {
        noRowsToShow: '조회 결과가 없습니다.'
    }, //데이터 없을 시 나오는 문구
    rowSelection: 'multiple', // row 다중 선택
    debug: false,
    onCellClicked: function (cell) { //셀 클릭 이벤트

        if ('title' == cell.column.colId) {
            fn_updateWebTreatmentPetitIntro(cell.data.postNo, cell.data.categoryNo);
        }
    },
    onRowDragEnd: function (event) {
        // 드래그 완료 시 순서저장 버튼 활성화
        $("#btnSaveOrdNo").prop("disabled", false).css("opacity", "1");
    },
    onSelectionChanged: function (treatmentpetit) { //체크박스 선택
        delList = treatmentpetit.api.getSelectedRows();
    },
    onSortChanged: function (treatmentpetit) {
        //정렬
        webTreatmentPetitSort = ''; //기존 정렬 초기화
        let columnArr = treatmentpetit.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) {
                    webTreatmentPetitStart = 0;
                    webTreatmentPetitSort += gridSortModel + ' ' + gridSort + ',';
                }
                else {
                    nullCnt++;
                    if (nullCnt == columnArr.length) {
                        webTreatmentPetitSort = '';
                        webTreatmentPetitDir = '';
                        webTreatmentPetitStart = 0;
                    }
                }
            }
        }
        webTreatmentPetitSort = webTreatmentPetitSort.substring(0, webTreatmentPetitSort.lastIndexOf(",")); //맨끝 콤마 지우기

        fn_webTreatmentPetitSearch();
    }
};

// lookup the container we want the Grid to use
let webTreatmentPetitGridDiv = document.querySelector('#webTreatmentPetitGrid');

// create the grid passing in the div to use together with the columns & data we want to use
new agGrid.Grid(webTreatmentPetitGridDiv, webTreatmentPetitGridOptions);

/****************************************************************************
 * 페이지 init
 ****************************************************************************/
function fn_pageInit() {
    // 카테고리 목록 동적 로드
    fn_loadCategoryList();

    // 초기 페이징 처리
    $("#webTreatmentPetitSearchKeyword1").val(webTreatmentPetitSearchKeywordParam1);

    fn_webTreatmentPetitSearch("A");
}

/****************************************************************************
 * 카테고리 목록 동적 로드
 ****************************************************************************/
function fn_loadCategoryList() {
    let formData = new FormData();
    formData.append("categoryDivCd", categoryDivCd);

    $.ajax({
        url: encodeURI('/contentsBbs/getCategoryList.do'),
        data: formData,
        dataType: "json",
        processData: false,
        contentType: false,
        type: 'POST',
        async: false,
        success: function (data) {
            if ('0' == data.msgCode) {
                let optionList = $("#categoryOptionList");
                // 기존 항목 유지 (전체)
                let rows = data.rows;
                for (let i = 0; i < rows.length; i++) {
                    let li = $('<li class="option_list_item" id="li_' + rows[i].categoryNo + '">' + rows[i].categoryNm + '</li>');
                    optionList.append(li);
                }
            }
        },
        error: function (xhr, status, error) {
            console.error("카테고리 목록 조회 오류", error);
        }
    });
}

/****************************************************************************
 * 페이지 이벤트 바인딩
 ****************************************************************************/
function fn_pageTreatmentPetit() {
    // 검색 input 엔터
    $(document).on('keypress', '#webTreatmentPetitSearchKeyword1', function (e) {
        fn_webTreatmentPetitEnter(e);
    });

    // 검색 조회 버튼
    $("#btnSearchWebTreatmentPetit").click(function () {
        fn_webTreatmentPetitSearch();
    });

    // 이벤트 등록 팝업 버튼
    $("#btnInsertWebTreatmentPetit").click(function () {
        fn_insertWebTreatmentPetitIntro();
    });

    // 이벤트 삭제 버튼
    $("#btnDeleteWebTreatmentPetit").click(function () {
        fn_deleteWebTreatmentPetit();
    });

    // 순서저장 버튼
    $("#btnSaveOrdNo").click(function () {
        fn_saveOrdNo();
    });

    // 카테고리 선택 콤보 이벤트
    $(document).on('click', '#categoryOptionList .option_list_item', function () {
        let selectIdArr = $(this).prop("id").split('_');
        let selectId = selectIdArr[1];
        let selectName = $(this).text();

        if (selectName === '전체') {
            selectId = '';
        }
        $(this).parent().siblings("button").text(selectName);
        $(this).parent().siblings("input").val(selectId);
    });
}

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

    // 페이지 이벤트 바인딩
    fn_pageTreatmentPetit();
});