/* 페이징 관련 변수 */
let userTotalCount   = 0;
let userTotalPages   = 0;


let userAgGridData = [];
/****************************************************************************
 * 고객 정보 리스트 조회
 ****************************************************************************/
function fn_selectListUserJson() {

    let formData = new FormData();
    formData.append("userSearchKeywordParam", userSearchKeywordParam);
    formData.append("userSort", userSort);
    formData.append("userStart", userStart);
    formData.append("userLimit", userLimit);
    formData.append("menuClass", menuClass);
    formData.append("userType", search_userType);
    formData.append("userTypeCode", search_userTypeCode);
    formData.append("nationality", search_nationality);
    formData.append("nationalityCode", search_nationalityCode);
    formData.append("membershipYn", search_membershipYn);

    $.ajax({
        url: encodeURI('/webmembership/selectListAppUser.do'),
        data: formData,
        dataType: "json",
        processData: false,
        contentType: false,
        type: 'POST',
        async: true,
        success: function (data) {
            if ('0' == data.msgCode) {
                userTotalCount = data.totalCount;
                $(".total").text(userTotalCount+'명');

                userTotalPages = Math.ceil(userTotalCount / userLimit);
                userAgGridData = data.rows.map((item, index) => {
                    if (item.phoneNumber) {
                        item.phoneNumber = fn_setFormatPhone(item.phoneNumber);
                    }
                    if (item.phoneNumber2) {
                        item.phoneNumber2 = fn_setFormatPhone(item.phoneNumber2);
                    }
                    return {
                        ...item,
                        rowNum: index + 1
                    };
                });
                userGridOptions.api.setRowData(userAgGridData);

                if (0 < data.rows.length) {

                    //페이징 처리
                    window.pagObj = $('#userPagination').twbsPagination({
                        startPage: ((userStart / userLimit) + 1),
                        totalPages: (userTotalPages == 0) ? 1 : userTotalPages,
                        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) {
                            fn_userPagination(page);
                        }
                    }).on('page', function (event, page) {
                    });

                }
            } else {
                modalEvent.danger("조회 오류", data.msgDesc);
            }

        },
        error: function (xhr, status, error) {
            modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
        },
        beforeSend: function () {
            // 로딩열기
            userGridOptions.api.showLoadingOverlay();
        },
        complete: function () {
        },
    });
}
/****************************************************************************
 * 검색필터 조회
 ****************************************************************************/
function fn_selectCategoryList(){
    let result = []
    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: false,
        success: function(data){
            if('0'==data.msgCode){
                if(0<data.rows.length){
                    result = data.rows;
                }
            }
            else{
                modalEvent.danger("조회 오류", data.msgDesc);
            }
        },
        error : function(xhr, status, error) {
            modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
        },
        beforeSend:function(){

        },
        complete:function(){

        }
    });
    return result;
}
/****************************************************************************
 * 페이징 처리
 ****************************************************************************/
function fn_userPagination(param){
    userStart = (parseInt(param)-1)*userLimit;
    fn_selectListUserJson();
}


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

    fn_appUserPaginReset();

    search_userType = $("#userType .option_list_item.selected").attr('id').split('_')[1]??'';
    search_userTypeCode = $("#userType .option_list_item.selected").data('code')??'';
    search_nationality = $("#nationality .option_list_item.selected").attr('id').split('_')[1]??'';
    search_nationalityCode = $("#nationality .option_list_item.selected").data('code')??'';
    search_membershipYn = $("#membershipYn .option_list_item.selected").attr('value')??'';
    userSearchKeywordParam = $("#txt_userSearchKeyword").val();

    fn_selectListUserJson();
}
/****************************************************************************
 * 페이징 리셋
 ****************************************************************************/
function fn_appUserPaginReset(){
    userSearchKeywordParam      = '';
    search_nationality          ='';
    search_userType             ='';
    search_membershipYn         ='';
    userStart                   = 0;
    userLimit                   = 500;
    userTotalCount              = 0;
    userTotalPages              = 0;
    userSort                    = '';

    //페이징 초기화
    if($("#userPagination").data("twbs-pagination")){
        $("#userPagination").twbsPagination("destroy");
    }
}
/****************************************************************************
 * 검색 엔터 이벤트
 ****************************************************************************/
function fn_userEnter(e){
    if(e.which){
        // 파이어폭스
        if(13 == e.which) {
            //로그인 액션 스크립트
            fn_appUserSearch();
        }
    }else{
        // 윈도우, 사파리, 크롬
        if(13 == event.keyCode) {
            //로그인 액션 스크립트
            fn_appUserSearch();
        }
    }
}
/****************************************************************************
 * 엑셀 다운 다운로드
 ****************************************************************************/
function fn_downloadUserExcel() {
    if ("Y" == downloadUseYn) {
        // 수정가능
        let pagingParam = "?menuClass=" + menuClass;
        pagingParam += "&userSearchKeywordParam=" + userSearchKeywordParam;
        pagingParam += "&userSort=" + userSort;
        pagingParam += "&userDir="+userDir;
        pagingParam += "&userStart=" + userStart;
        pagingParam += "&userLimit=" + userLimit;
        pagingParam += "&userTypeCode=" + (search_userTypeCode ?? "");
        pagingParam += "&userType=" + (search_userType ?? "");
        pagingParam += "&nationalityCode=" + (search_nationalityCode ?? "");
        pagingParam += "&nationality=" + (search_nationality ?? "");
        pagingParam += "&membershipYn=" + (search_membershipYn ?? "");

        let url = encodeURI("/webmembership/downloadAppUserExcel.do" + pagingParam);
        $("#excelForm").prop("action", url);
        $("#excelForm").submit();
    } else {
        modalEvent.warning("", "내려받기 권한이 없습니다.");
        return false;
    }
}



/****************************************************************************
 * 수정 화면으로 이동.
 ****************************************************************************/
function fn_updateUserIntro(param) {
    if ("Y" == updateUseYn || "Y" == selectUseYn) {
        // 수정가능
        let pagingParam = "?muUserId=" + param;
        pagingParam    += "&userSearchKeywordParam="+userSearchKeywordParam;
        pagingParam    += "&userSort="+userSort;
        pagingParam    += "&userDir="+userDir;
        pagingParam    += "&userStart="+userStart;
        pagingParam    += "&userLimit="+userLimit;
        pagingParam    += "&nationality="+search_nationality??'';
        pagingParam    += "&userType="+search_userType??'';
        pagingParam    += "&membershipYn="+search_membershipYn??'';

        fn_leftFormAction2('02010101', "/webuser/updateUserIntro.do" + pagingParam);
    } else {
        modalEvent.warning("", "조회 및 수정 권한이 없습니다.");
        return false;
    }
}

function userTypeCellRenderer(params) {
    let imgSrc = params.value.replace("C:", "");
    return `<img src="${imgSrc}" alt="고객구분">`;
}
function statusCellRender(params) {
    if ('가입' !== params.data.status) {
        return `<span style="color: #F70000;">${params.value}</span>`;
    }
    return `<span>${params.value}</span>`
}

let userColumnDefs = [
    // {
    //     field: "checkbox",
    //     headerName: "",
    //     minWidth: 55,
    //     maxWidth: 55,
    //     headerCheckboxSelection: true,
    //     checkboxSelection: true
    // },
    {field: "rowNum", headerName:"번호", minWidth:80,maxWidth:80,cellStyle:{textAlign: 'right'}},
    {field: "userName", headerName: "고객명", minWidth: 130, maxWidth: 160, cellStyle:{cursor: 'pointer', color:'#3985EA'}},
    {field: "nationality", headerName: "국적", minWidth: 90, maxWidth: 90},
    {field: "birth", headerName: "생년월일", minWidth: 100, maxWidth: 160},
    {field: "membershipAccount", headerName: "아이디", minWidth: 100, maxWidth: 160},
    {field: "gender", headerName: "성별", minWidth: 100,maxWidth: 100},
    {field: "userType", headerName: "고객구분", minWidth: 100, maxWidth: 100, cellRenderer: userTypeCellRenderer},
    {field: "phoneNumber", headerName: "연락처", minWidth: 150, maxWidth: 150},
    {field: "membershipYn", headerName: "멤버십", minWidth: 100, maxWidth: 100},
    {field: "writeDate", headerName: "앱 가입일", minWidth: 100, maxWidth: 260},
    {field: "recent", headerName: "최근 예약일", minWidth: 100, maxWidth: 260},
    {field: "status", headerName: "상태", minWidth: 100, maxWidth: 150, cellRenderer: statusCellRender}
];

// let the grid know which columns and what data to use
let userGridOptions = {
    suppressRowTransform: true,
    columnDefs: userColumnDefs,
    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: userAgGridData,
    suppressRowClickSelection: true, // 로우 클릭시 체크박스 선택 true no, false yes
    localeText: {
        noRowsToShow: '조회 결과가 없습니다.'
    }, //데이터 없을 시 나오는 문구
    rowSelection: 'multiple', // row 다중 선택
    debug: false,
    onCellClicked: function (event) { //셀 클릭 이벤트
        /* alert(event.column.colId); */
        if (event.column.colId == 'userName') {
            fn_updateUserIntro(event.data.muUserId);
        }
    },
    onSelectionChanged: function (event) { //체크박스 선택
        let selectRows = [];
        selectRows = event.api.getSelectedRows();

        userSelectId = '';

        for (let i = 0; i < selectRows.length; i++) {
            userSelectId += selectRows[i].muUserId + ",";
        }

        userSelectId = userSelectId.substring(0, userSelectId.lastIndexOf(','));
    },
    onSortChanged: function (event) {
        //정렬
        userSort = ''; //기존 정렬 초기화
        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) {
                    userStart = 0;

                    userSort += gridSortModel + ' ' + gridSort + ',';

                } else {
                    nullCnt++;

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

                        userStart = 0;
                    }
                }
            }
        }

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

        fn_appUserSearch();
    }
};

let userGridDiv = document.querySelector('#appUserGrid');

new agGrid.Grid(userGridDiv, userGridOptions);

/****************************************************************************
 * 옵션선택
 ****************************************************************************/
function fn_OptionSelection(target,e) {
    // 옵션 선택 이벤트 핸들러
    let selectedOption = $(target).text();
    if ('' !== selectedOption) {
        // 선택된 옵션의 텍스트를 .label 요소에 설정
        $(target).closest('.select_box').find('.label').text(selectedOption);
    } else {
        // 선택된 옵션이 텍스트가 아닌 경우(예: 이미지), .html()을 사용
        selectedOption = $(target).html();
        $(target).closest('.select_box').find('.label').html(selectedOption);
    }
    $(target).closest('.select_box').find('input')?.val($(target).attr('id')??selectedOption);
    // $(target).closest('.select_box').find('.option_list_item').removeClass('selected');
    // $(target).addClass('selected');
    // $(target).closest('.select_option_list').hide();
    // e.stopPropagation();

}
/****************************************************************************
 * 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_setSelectBox(num){
    let category=fn_selectCategoryList();
    for(let i = 0; i < num; i++){
        let categoryCode     = category[i].categoryCode;
        fn_selectListOtherOption(categoryCode);
    }
}
//카테고리 아이템 리스트 조회
function fn_selectListOtherOption(categoryCode){
    let formData = new FormData();
    formData.append('categoryCode',categoryCode);
    $.ajax({
        url: encodeURI('/webcategory/selectCategoryItem.do'),
        data: formData,
        dataType: "json",
        processData: false,
        contentType: false,
        type: 'POST',
        async: false,
        success: function(data){
            if('0'==data.msgCode){
                let listHTML = '';
                if (0 < Object.keys(data.rows).length) {
                    Object.keys(data.rows).forEach(category => {
                        // for(let i = 0; i < data.rows[key].length; i++){
                        let categoryItem = data.rows[category];
                        let categoryItemCode = categoryItem.categoryItemCode;
                        let categoryItemName = categoryItem.categoryItemName;

                        let selectedYn = '';
                        let nationality = '';

                        if(categoryItem.categoryName === '국적') {
                            nationality = categoryItemName.toLowerCase().includes('한국'.toLowerCase()) ? 'local' : 'foreigner';
                        }
                        if(categoryItem.filePath){
                            let url = categoryItem.filePath.replace("C:", "");
                            categoryItemName = `<img src="${url}">`
                        }
                        listHTML = `<li class="option_list_item ${nationality}" data-code="${categoryCode}" id="${categoryItemCode}">${categoryItemName}</li>`;
                        let categoryName = categoryItem.categoryName;
                        $('.select_box button').each(function() {
                            if ($(this).text() === categoryName) {
                                $(this).parent().find('ul').append(listHTML);
                            }
                        });
                    });
                }

            }else if(data.msgCode=='-1'){
                modalEvent.warning("조회 오류", data.msgDesc);
            }else{
                modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
            }
        },
        error : function(xhr, status, error) {
            modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
        },
        beforeSend:function(){
        },
        complete:function(){
        }
    });
}
document.addEventListener("DOMContentLoaded", function() {
    fn_setSelectBox(2);
    fn_clickEvent();
    $(`#userType .option_list_item[id="${search_userType}"]`).click();
    $(`#nationality .option_list_item[id="${search_nationality}"]`).click();
    $(`#membershipYn .option_list_item[value="${search_membershipYn}"]`).click();
    $("#txt_userSearchKeyword").val(decodeURIComponent(userSearchKeywordParam));
    fn_appUserSearch();
});
document.getElementById("downLoadBtn").addEventListener('click',()=>{
    fn_downloadUserExcel();
});

document.getElementById("searchBtn").addEventListener('click',()=>{
    fn_appUserSearch();
});
document.getElementById("txt_userSearchKeyword").addEventListener('keypress',(e)=>{
    fn_userEnter(e);
});
