/*aggird*/
let appContentsAgGridData = [];
/****************************************************************************
 * 콘텐츠 등록
 ****************************************************************************/
function fn_insertAppBoard(){
    if("Y"!=insertUseYn){
        modalEvent.warning("", "등록 권한이 없습니다.");
        return false;
    }

    let title          = $("#title").val();
    let content      = $("#content").val();
    let exposedYn= true===$("#exposedYn").prop('checked')?'Y':'N';
    let contentData       = appContentsAgGridData;

    if(true != fn_emptyCheck(title)) {
        modalEvent.warning("등록", "보드 제목을 입력하세요.");
        return;
    }
    // else{
    //     if(true != fn_lengthCheck(title, 20)) {
    //         modalEvent.warning("등록", "보드 제목은 20자를 넘을 수 없습니다.");
    //         return;
    //     }
    // }

    if(true != fn_emptyCheck(content)) {
        modalEvent.warning("등록", "보드 내용을 입력하세요.");
        return;
    }
    // else{
    //     if(true != fn_lengthCheck(content, 50)) {
    //         modalEvent.warning("등록", "보드 내용은 50자를 넘을 수 없습니다.");
    //         return;
    //     }
    // }

    if(0===contentData.length) {
        modalEvent.warning("등록", "콘텐츠를 선택하세요.");
        return;
    }

    modalEvent.info("등록", "보드 정보를 등록하시겠습니까?", function(){
        let formData = new FormData();
        formData.append("menuClass", menuClass);
        formData.append("title", title);
        formData.append("content", content);
        formData.append("exposedYn", exposedYn);
        formData.append("contentData", JSON.stringify(contentData));

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

            },
            complete:function(){

            }
        });
    });
}

/****************************************************************************
 * 콘텐츠 불러오기 팝업
 ****************************************************************************/
function fn_selectAppContentsPopup(){
    if("Y"!=selectUseYn){
        modalEvent.warning("", "조회 권한이 없습니다.");
        return false;
    }
    let reqParam =  appContentsAgGridData;
    appContentsSelectModal.popup(function(obj, reqParam) {
        appContentsAgGridData = obj.map((item,index) => {
            item.management = '삭제';
            item.rowNum = index+1
            item.writeDate = item.writeDate.split(',')[0]
            return item;
        });
        appContentsGridOptions.api.setRowData(appContentsAgGridData);
    }, reqParam);
}

/****************************************************************************
 * 리스트 화면으로 이동.
 ****************************************************************************/
function fn_selectListAppBoardIntro(){
    if("Y"==selectUseYn){
        let pagingParam = "?menuClass="+menuClass;
        fn_leftFormAction("/webappboard/selectListBoardIntro.do"+pagingParam);
    }else{
        modalEvent.warning("", "조회 권한이 없습니다.");
        return false;
    }
}
function thumbnailCellRenderer(params) {
    if(!params.value)
        return
    else
        return `<img src="${params.value.replace("C:", "")}" width="40" height="40" alt="Thumbnail">`;
}

let appContentsColumnDefs = [
    // {field: "checkbox", headerName:"", minWidth:55, maxWidth:55, headerCheckboxSelection: true, checkboxSelection: true},
    /* {field: "rowNum", headerName:"번호", minWidth:80,maxWidth:80, sortable: false}, */
    {field: "rowNum", headerName:"번호", minWidth:60,sortable: false, cellStyle:{textAlign: 'center'}},
    {field: "filePath2", headerName:"섬네일", minWidth:100, maxWidth:100, cellRenderer: thumbnailCellRenderer},
    {field: "title", headerName:"제목", minWidth:250},
    {field: "content", headerName:"내용",minWidth:450},
    {field: "writeDate", headerName:"작성일",minWidth:150, maxWidth:150},
    {field: "management", headerName:"관리",minWidth:100, maxWidth:100,cellStyle:{color:'red'}},
];

// let the grid know which columns and what data to use
let appContentsGridOptions = {
    suppressRowTransform: true,
    columnDefs: appContentsColumnDefs,
    defaultColDef: {		// 리스트 기본 설정
        flex: 1,
        sortable: true,		//정렬 여부
        resizable: true,	//리사이즈
        editable: true,	// 그리드에서 데이터 수정
        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 : appContentsAgGridData,
    suppressRowClickSelection : true, // 로우 클릭시 체크박스 선택 true no, false yes
    localeText : {
        noRowsToShow : '콘텐츠를 추가해주세요.'
    }, //데이터 없을 시 나오는 문구
    rowSelection : 'multiple', // row 다중 선택
    debug : false,
    onCellClicked: function(event){ //셀 클릭 이벤트
        /* alert(event.column.colId); */
        if('management'==event.column.colId){
            const selectedRowData = event.data;
            modalEvent.info('삭제',`콘텐츠 (제목: ${selectedRowData.title})를 삭제하시겠습니까?`,
            function(){
                event.api.applyTransaction({ remove: [selectedRowData] });

                let allRowData = [];
                event.api.forEachNode((node, index) => {
                    node.data.rowNum = index + 1;
                    allRowData.push(node.data);
                });
                event.api.setRowData(allRowData);
                appContentsAgGridData=allRowData;
            });
        }
    },
    onSelectionChanged: function(event){ //체크박스 선택
        let selectRows = [];
        selectRows = event.api.getSelectedRows();

        appBoardSelectId = '';
        for(let i=0; i<selectRows.length; i++){
            appBoardSelectId += selectRows[i].muAppBoardId + ",";
        }
        appBoardSelectId = appBoardSelectId.substring(0, appBoardSelectId.lastIndexOf(','));
    },
    onSortChanged: function(event){
        //정렬
        appBoardSort = ''; //기존 정렬 초기화
        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){
                    appBoardStart = 0;
                    appBoardSort += gridSortModel+' '+ gridSort + ',';
                }
                else{
                    nullCnt++;
                    if(nullCnt == columnArr.length){
                        appBoardSort = '';
                        appBoardDir = '';
                        appBoardStart = 0;
                    }
                }
            }
        }
        appBoardSort = appBoardSort.substring(0,appBoardSort.lastIndexOf( ",")); //맨끝 콤마 지우기

        fn_appBoardSearch();
    }
};

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

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


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

/****************************************************************************
 * 페이지 event
 ****************************************************************************/
function fn_pageEvent(){
    // 검색 input
    $('.btnCancle').on("click", function(){
        fn_selectListAppBoardIntro();
    });

    $('.btnSave').on("click", function(){
        fn_insertAppBoard();
    });
    $('#selectContentBtn').on('click', function(e) {
        fn_selectAppContentsPopup();
    })
    // 카테고리 선택 콤보 이벤트
    const categoryTarget = $("#appContentCategoryName").siblings("ul.select_option_list");
    categoryTarget.find("li.option_list_item").click(function () {
        let selectIdArr = $(this).prop("id").split('_');
        let selectId    = selectIdArr[1];
        let selectName  = $(this).text();
        if(selectId.match("ALL")){
            selectId = '';
        }
        $(this).parent().siblings("button").text(selectName);
        $(this).parent().siblings("input").val(selectId);
    });
}

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

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