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


let userAgGridData = [];
let muUserData=[];

let selectedRows = [];

/****************************************************************************
 * 팝빌 잔여 포인트 조회
 ****************************************************************************/
function fn_selectPopbillPoint(){

    let formData = new FormData();

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

                $("#myPopbillPoint").text(fn_numberFormat(data.point));

            }else{
                modalEvent.danger("조회 오류", data.msgDesc);
            }
        },
        error : function(xhr, status, error) {
            modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
        }
    });
}

/****************************************************************************
 * 팝빌 포인트 충전 이동
 ****************************************************************************/
function fn_chargeePopbillPointIntro(){

    let formData = new FormData();

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

                window.open(data.url);

            }else{
                modalEvent.danger("조회 오류", data.msgDesc);
            }
        },
        error : function(xhr, status, error) {
            modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
        }
    });
}

/****************************************************************************
 * 고객 정보 리스트 조회
 ****************************************************************************/
function fn_selectListUserMarketingJson() {

    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('/webuser/selectListUserMarketing.do'),
        data: formData,
        dataType: "json",
        processData: false,
        contentType: false,
        type: 'POST',
        async: true,
        success: function (data) {
            if ('0' == data.msgCode) {
                userTotalCount = data.totalCount;
                $("#marketingSmsTotalCount").text(fn_numberFormat(userTotalCount)+'명');

                userTotalPages = Math.ceil(userTotalCount / userLimit);
                userAgGridData = data.rows;
                userGridOptions.api.setRowData(userAgGridData);


                // 체크 목록
                if(0<selectedRows.length){
                    for(let i=0; i<selectedRows.length; i++){
                        userGridOptions.api.forEachNode(function(node){
                           if(node.data.muUserId == selectedRows[i].muUserId){
                               node.setSelected(true);
                           }
                        });
                    }
                }

                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_userPagination(param){
    userStart = (parseInt(param)-1)*userLimit;
    fn_selectListUserMarketingJson();
}

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

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

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

    fn_userPaginReset();

    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') || '';
    search_appUseYn         = $("#appUseYn .option_list_item.selected").attr('value') || '';
    userSearchKeywordParam  = $("#txt_userSearchKeyword").val() || '';

    fn_selectListUserMarketingJson();
}
/****************************************************************************
 * 검색 엔터 이벤트
 ****************************************************************************/
function fn_userEnter(e){
    if(e.which){
        // 파이어폭스
        if(13 == e.which) {
            //로그인 액션 스크립트
            fn_userSearch();
        }
    }else{
        // 윈도우, 사파리, 크롬
        if(13 == event.keyCode) {
            //로그인 액션 스크립트
            fn_userSearch();
        }
    }
}

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

    if(0 == selectedRows.length){
        modalEvent.warning("", "발송대상이 없습니다.");
        return false;
    }

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

/****************************************************************************
 * 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 () {
        // $('.select_box').not(this).find('.select_option_list').hide();
        // fn_clickSelectBox($(this));
    // });
    // 옵션 선택 이벤트
    $('.select_box').on('click', 'li', function (e) {
        fn_OptionSelection($(this), e);
    });
//
// // 다른 곳을 클릭했을 때 옵션 숨기기
//     $(document).on('click', function (event) {
//         if (!$(event.target).closest('.select_box').length) {
//             $('.user .select_option_list').hide();
//         }
//     });
}

/****************************************************************************
 * 옵션선택
 ****************************************************************************/
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();

}
/****************************************************************************
 * 검색필터 조회
 ****************************************************************************/
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_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(){
        }
    });
}

/****************************************************************************
* 글자 수 byte 체크 (SMS)
****************************************************************************/
function fn_getByteText(param, maxByte){

    let strValue = param.value;
    let strLen = strValue.length;
    let totalByte = 0;
    let len = 0;
    let str2 = '';
    let code;

    if(!strValue){
        $("#smsContentByteCheck").text("0");
        $("#smsTypeCheck").val("S");
    }else{
        for(let i=0; i<strLen; i++){
            code = strValue.charCodeAt(i);

            if(code > 127){
                totalByte += 2;
            }else{
                totalByte += 1;
            }

            $("#smsContentByteCheck").text(totalByte);

            // 입력한 문자 길이보다 넘치면 잘라내기 위해 저장
            if(totalByte <= maxByte){
                len = i+1;
            }

            if(totalByte>90){
                $("#smsTypeCheck").val("L");
            }else{
                $("#smsTypeCheck").val("S");
            }
        }
    }

    // 넘어가는 글자는 자른다.
    if(totalByte > maxByte){
        modalEvent.warning("", maxByte + "자를 초과 입력할 수 없습니다.");

        str2 = strValue.substr(0, len);
        param.value = str2;
        $("#smsContentByteCheck").text(maxByte);
        fn_getByteText(param);
    }
}


function mergeSelectedRows(existingRows, newSelectedRows) {
    // 기존의 선택된 row와 새로운 선택된 row를 병합합니다.
    const updatedRows = existingRows.filter(row =>
        !newSelectedRows.some(newRow => newRow.muUserId === row.muUserId)
    );
    return [...updatedRows, ...newSelectedRows];
}

function userTypeCellRenderer(params) {
    if(!params.value)
        return
        if('T'===params.value)
            return '간편예약고객';
        if('Y'===params.value||''===params.value)
            return '-';
        else
            return `<img src="${params.value.replace("C:", "")}" alt="고객구분">`;
}

let userColumnDefs = [
        {
            field: "checkbox",
            headerName: "",
            minWidth: 55,
            maxWidth: 55,
            headerCheckboxSelection: true,
            checkboxSelection: true
        },
        {field: "rowNum", headerName:"번호", minWidth:60, maxWidth:60, sortable: false, cellStyle:{textAlign: 'center'}},
        {field: "userName", headerName: "고객명", minWidth: 100, maxWidth: 140},
        {field: "nationality", headerName: "국적", minWidth: 90, maxWidth: 90},
        {field: "birthday", headerName: "생년월일", minWidth: 100, maxWidth: 130},
        {field: "age", headerName: "나이", minWidth: 100, maxWidth: 130},
        {field: "gender", headerName: "성별", minWidth: 70,maxWidth: 90},
        {field: "userType", headerName: "고객구분", minWidth: 70, maxWidth: 130, cellRenderer: userTypeCellRenderer},
        {field: "phoneNumber", headerName: "연락처", minWidth: 150, maxWidth: 150},
        {field: "membershipYn", headerName: "멤버십", minWidth: 100, maxWidth: 100},
        {field: "etc", headerName: "특이사항", minWidth: 100, maxWidth: 230},
        {field: "memo", headerName: "고객메모", minWidth: 100, maxWidth: 230},
        {field: "lastVisitDate", headerName: "최근내원", minWidth: 100, maxWidth: 140},
        {field: "appUseYn", headerName: "앱 가입상태", minWidth: 100, maxWidth: 100}
];

// 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); */
    },
    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(','));*/

        let selectedNodes = event.api.getSelectedNodes();
        let selectedData = selectedNodes.map(node => node.data);

        selectedRows = mergeSelectedRows(selectedRows, selectedData);
        // console.log("====onSelectionChanged====");
        // console.log(selectedRows);
    },
    onRowSelected: function (event) { // 체크박스 선택
        let selectNode = event.node;

        if(selectNode.selected){
            // 배열에 저장
            // selectedRows.push(selectNode.data.muUserId);
        }else{
            for(let i=0; i<selectedRows.length; i++){
                if(selectNode.data.muUserId == selectedRows[i].muUserId){
                    // 배열에서 삭제
                    selectedRows.splice(i, 1);
                    i--;
                }
            }
        }
        // console.log("====onRowSelected====");
        // console.log(selectedRows);
    },
    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_userSearch();
    }
};

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

new agGrid.Grid(userGridDiv, userGridOptions);
function fn_setSelectBox(num){
    let category=fn_selectCategoryList();
    for(let i = 0; i < num; i++){
        let categoryCode     = category[i].categoryCode;
        if(num>2){
            fn_selectModalOtherOption(categoryCode)
        }else{
            fn_selectListOtherOption(categoryCode);
        }
    }
}
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_userSearch();

    fn_selectPopbillPoint();

});

document.getElementById("popbillPointBtn").addEventListener('click',()=>{
    fn_chargeePopbillPointIntro();
});

document.getElementById("sendIntroBtn").addEventListener('click',()=>{
    fn_insertMarketingSmsPopup();
});

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

