/* 페이징 관련 변수 */
let appUserTotalCount = 0;
let appUserTotalPages = 0;

/*aggird*/
let appUserAgGridData = [];

let appUserSelectId   = "";

/****************************************************************************
 * 앱 회원 정보 리스트 조회
 ****************************************************************************/
function fn_selectListAppUserJson(){
    let formData = new FormData();
    formData.append("menuClass", menuClass);
    formData.append("appUserSearchKeywordParam", appUserSearchKeywordParam);
    formData.append("appUserSort", appUserSort);
    formData.append("appUserDir", appUserDir);
    formData.append("appUserStart", appUserStart);
    formData.append("appUserLimit", appUserLimit);
    formData.append("appIntroType", appIntroType);

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

                $('#appUserTotalCount').text(`${appUserTotalCount}명`);

                appUserTotalPages = Math.ceil(appUserTotalCount/appUserLimit);

                // 리스트 조회
                appUserAgGridData = data.rows;

                appUserAgGridData = data.rows.map((item, index) => ({
                    ...item,
                    rowNum: index + 1
                }));

                appUserGridOptions.api.setRowData(appUserAgGridData);

                if(0<data.rows.length){
                    //페이징 처리
                    window.pagObj = $('#appUserPagination').twbsPagination({
                        startPage    : ((appUserStart/appUserLimit)+1),
                        totalPages   : (appUserTotalPages==0)?1:appUserTotalPages,
                        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_appUserPagination(page);
                        }
                    }).on('page', function (event, page) {
                        //console.info(page + ' (from event listening)');
                    });
                }
                else{

                }
            }
            else{
                modalEvent.danger("조회 오류", data.msgDesc);
            }
        },
        error : function(xhr, status, error) {
            modalEvent.danger("조회 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
        },
        beforeSend:function(){
            // 로딩열기
            appUserGridOptions.api.showLoadingOverlay();
        },
        complete:function(){

        }
    });
}

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

    fn_appUserPaginReset();

    appIntroType   = $("#appIntroType").val()??"";

    appUserSearchKeywordParam = $("#appUserSearchKeyword").val()??"";

    fn_selectListAppUserJson();
}


/****************************************************************************
 * 초기화하기
 ****************************************************************************/
function fn_appUserReset(){
    $('#li_All').click();

    $("#appUserSearchKeyword").val('');

    fn_appUserSearch();
}

/****************************************************************************
 * 페이징 처리
 ****************************************************************************/
function fn_appUserPagination(param){
    appUserStart = (parseInt(param)-1)*appUserLimit;

    fn_selectListAppUserJson();
}

/****************************************************************************
 * 페이징 리셋
 ****************************************************************************/
function fn_appUserPaginReset(){
    appUserSearchKeywordParam = '';

    appUserStart        = 0;
    appUserLimit        = 100;
    appUserTotalCount   = 0;
    appUserTotalPages   = 0;

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

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

/****************************************************************************
 * 완료
 ****************************************************************************/
function fn_appUserOk(){
    fn_appUserReset();
}
/****************************************************************************
 * 수정 화면으로 이동.
 ****************************************************************************/
function fn_updateAppUserIntro(param) {
    if ("Y" == updateUseYn || "Y" == selectUseYn) {
        // 수정가능
        let pagingParam = "?muUserId=" + param;
        fn_leftFormAction2('0201010101', "/webuser/updateUserIntro.do" + pagingParam);
    } else {
        modalEvent.warning("", "조회 및 수정 권한이 없습니다.");
        return false;
    }
}

/****************************************************************************
 * 엑셀 다운 다운로드
 ****************************************************************************/
function fn_downloadAppUserExcel(){
    if("Y"==downloadUseYn){
        // 수정가능
        let pagingParam = "?menuClass="+menuClass;
        pagingParam    += "&appUserSearchKeywordParam="+appUserSearchKeywordParam;
        pagingParam    += "&appUserSort="+appUserSort;
        pagingParam    += "&appUserDir="+appUserDir;
        pagingParam    += "&appUserStart="+appUserStart;
        pagingParam    += "&appUserLimit="+appUserLimit;
        pagingParam    += "&appIntroType="+appIntroType;

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



function fn_phoneFormatter(params){
    return fn_setFormatPhone(params.value);
}

let appUserColumnDefs = [
    /*{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: "userName", headerName:"고객명",minWidth:200, maxWidth:300, cellStyle:{cursor: 'pointer', color:'#3985EA'}},
    {field: "membershipAccount", headerName:"아이디",minWidth:200, maxWidth:300},
    {field: "phoneNumber", headerName:"연락처", minWidth:150, maxWidth:200, valueFormatter: fn_phoneFormatter},
    {field: "appIntroType", headerName:"회원내역", minWidth:250, maxWidth:300},
    {field: "phoneType", headerName:"디바이스 OS",minWidth:200,maxWidth:200},
    {field: "appIntroDate", headerName:"앱 가입일",minWidth:250,maxWidth:250},
    {field: "reserveDate", headerName:"최근 앱 예약일",minWidth:250, maxWidth:250},
];

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

        appUserSelectId = '';
        for(let i=0; i<selectRows.length; i++){
            appUserSelectId += selectRows[i].muappUserId + ",";
        }
        appUserSelectId = appUserSelectId.substring(0, appUserSelectId.lastIndexOf(','));
    },
    onSortChanged: function(event){
        //정렬
        appUserSort = ''; //기존 정렬 초기화
        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){
                    appUserStart = 0;
                    appUserSort += gridSortModel+' '+ gridSort + ',';
                }
                else{
                    nullCnt++;

                    if(nullCnt == columnArr.length){
                        appUserSort  = '';
                        appUserDir   = '';
                        appUserStart = 0;
                    }
                }
            }
        }
        appUserSort = appUserSort.substring(0,appUserSort.lastIndexOf( ",")); //맨끝 콤마 지우기

        fn_appUserSearch();
    }
};

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

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


/****************************************************************************
 * 페이지 init
 ****************************************************************************/
function fn_pageInit(){
    // 초기 페이징 처리
    if(!appIntroType){

    }else{
        $('#li_'+appIntroType).click();
    }

    $("#appUserSearchKeyword").val(appUserSearchKeywordParam);

    fn_appUserSearch("A");
}

/****************************************************************************
 * 페이지 event
 ****************************************************************************/
function fn_pageEvent(){
    // 검색 input
    $(document).on('keypress', '#appUserSearchKeyword', function(e) {
        fn_appUserEnter(e);
    });

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


    // 엑셀 다운로드 버튼
    $("#btnDownloadAppUserExcel").click(function () {
        fn_downloadAppUserExcel();
    });

    $('.select_box').on('click', 'li', function (e) {
        let target = $(this);

        // 옵션 선택 이벤트 핸들러
        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);
        }
        let selectedValue = target.attr('value');
        if(selectedValue.match("All")){
            target.closest('.select_box').find('input')?.val('');
        }else{
            target.closest('.select_box').find('input')?.val(selectedValue);
        }
    });
}

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

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