
/* ##############################################################
	설  명 : [Modal]공지사항 상세/수정 팝업
	작성일 : 2023. 01. 19.
	작성자 : NTsoft
	수정일 	        수정자 	 수정내용
	-------         -------- ---------------------------
	2023. 01. 19.	NTsoft 	 최초 생성
*/

// let timer;
let isRunning = false;

let phoneAuthYn = "N";

let updateEmailModal = {
    callback : null,
    reqParam : null,
    dataList : null,
    /* 모달 초기화 작업 */
    init : function () {
        $('#updateEmailModal').remove();
        $('body').append( this.HtmlTemplate);
        //그리드 이벤트
        this.setEvent();
    },
    /* 그리드 이벤트 설정 */
    setEvent:function() {
        $('#updateEmailModal .btnCancle').on("click", function(){
            updateEmailModal.close();
        });

        $('#updateEmailModal .btnSave').on("click", function(){
            updateEmailModal.save("I");
        });

        $("#updateEmailModal #modalOpenDate").datetimepicker({
            allowInputToggle: true,
            format: 'YYYY-MM-DD',
            defaultDate: moment()
        });
    },
    /* 데이터 선택 */
    setSelect:function(selectNumber) {
        let checkedData = dataList[selectNumber];
        if(dataList==null||checkedData==undefined){
            return ;
        }

        if( updateEmailModal.callback )  {
            updateEmailModal.callback(checkedData);
        }
        updateEmailModal.close();
    },
    //저장
    save:function(state) {
        let email = $("#updateEmailModal #email").val();
        let phoneNumber = $("#updateEmailModal #phoneNumber").val();
        let authNumber = $("#updateEmailModal #authNumber").val();
        let reg_email    = /^([0-9a-zA-Z_\.-]+)@([0-9a-zA-Z_-]+)(\.[0-9a-zA-Z_-]+){1,2}$/;
        let reg_tel      = /^[0-9]{10,11}$/;

        // if(true != fn_emptyCheck(email)){
        //     modalEvent.warning("수정", "이메일을 입력하세요.");
        //     return;
        // }else{
        //     if(!reg_email.test(email)) {
        //         modalEvent.warning("수정", "이메일 형식에 맞게 입력해주세요.");
        //         return;
        //     }else if(true != fn_lengthCheck(email, 255)) {
        //         modalEvent.warning("수정", "이메일은 255자를 넘을 수 없습니다.");
        //         return;
        //     }
        // }

        if(true != fn_emptyCheck(phoneNumber)){
            modalEvent.warning("수정", "휴대폰번호를 입력해주세요.");
            return;
        }else{
            if(reg_tel.test(phoneNumber) != true) {
                modalEvent.warning("수정", "휴대폰번호는 숫자 10~11자리여야 합니다.");
                return;
            }else{
                phoneNumber = phoneNumber.replace("-", "");
            }
        }
        if(phoneAuthYn === "Y"){

            if(true !== fn_emptyCheck(authNumber)){
                modalEvent.warning("수정", "인증번호는 필수 입력정보 입니다.");
                return;
            }

            modalEvent.info("수정", "휴대폰 번호를 수정하시겠습니까?", function(){

                let formData = new FormData();
                formData.append("email", email);
                formData.append("phoneNumber", phoneNumber);
                formData.append("authNumber", authNumber);

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

                            let msgDesc = data.msgDesc;
                            modalEvent.success("", "휴대폰 번호가 수정되었습니다.", function(){
                                if( updateEmailModal.callback )  {
                                    updateEmailModal.callback();
                                }
                                updateEmailModal.close();
                            });

                        }else{
                            modalEvent.danger("", data.msgDesc);
                        }
                    },
                    error : function(xhr, status, error) {
                        modalEvent.danger("", "정상적으로 수행되지 않았습니다. 인터넷에 연결되어 있는지 확인해 보시기 바랍니다.");
                    },
                    complete:function(){

                    }
                });
            });
        }else{
            modalEvent.warning("수정", "휴대폰 인증을 진행하세요.");
        }
    },
    /*
     * 팝업
     * callback : 콜백함수, reqParam: 팝업파라미터
     */
    popup:function(callback, reqParam) {
        // 초기화 후 열기
        updateEmailModal.init();

        //콜백함수 지정.
        updateEmailModal.callback = callback;
        updateEmailModal.reqParam = reqParam;
        updateEmailModal.dataList = null;

        setTimeout(function(){
            $('#updateEmailModal').modal('show')
        }, 200);
    },
    /*
     * 팝업 닫기
     */
    close:function() {
        $('#updateEmailModal').modal('hide');

		setTimeout(function(){
			$('#updateEmailModal').remove();
		},500);
    },
    HtmlTemplate : `
		<div class="modal myInfo_modal fade" id="updateEmailModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="">
			<div class="modal-dialog">
				<div class="modal-content">
					<div class="modal-header">
						<p class="label">휴대폰 번호 수정</p>
					</div>    
		
					<div class="modal-body">
						<ul>
                            <li class="label">휴대폰 번호</li>
                            <li class="ipbt">
                                <input id="phoneNumber" type="tel" placeholder="-없이 번호 입력">
                                <button id="sendAuthNumBtn" onClick="fn_sendAuthNum()">인증번호 발송</button>
                            </li>
                            <li class="ipbt">
                                <input id="authNumber" type="password" placeholder="인증번호 입력">
                                <button id="authNumBtn" onClick="fn_selectPhoneAuthCheck()">인증번호 확인</button>
                            </li>
                            <p id="timer" style="color: #3985EA;padding: 10px;margin: auto;"></p>
                            <li class="label" style="display:none;">이메일</li>
                            <li style="display:none;"><input id="email" type="email" placeholder="e-mail@mail.com"></li>
                        </ul>
					</div>
					<div class="modal-footer">
						<div class="btn_box">
							<button class="close_btn btnCancle">닫기</button>
							<button class="save_btn btnSave">저장</button>
						</div>
					</div>
				</div>
			</div>
		</div>
    `
};

/****************************************************************************
 * 인증번호 발송
 ****************************************************************************/
function fn_sendAuthNum(){

    let phoneNumber = $("#updateEmailModal #phoneNumber").val();
    let reg_tel = /^[0-9]{10,11}$/;

    if(true != fn_emptyCheck(phoneNumber)){
        modalEvent.warning("조회", "휴대폰번호를 입력하세요.");
        return;
    }else{
        if(reg_tel.test(phoneNumber) != true) {
            modalEvent.warning("조회", "휴대폰번호는 숫자 10~11자리여야 합니다.");
            return;
        }else{
            // 인증번호 발송
            fn_insertPhoneAuth();
        }
    }
}

/****************************************************************************
 * 인증번호 등록
 ****************************************************************************/
function fn_insertPhoneAuth(){

    isRunning = false;

    let phoneNumber = $("#updateEmailModal #phoneNumber").val();
    let authType          = "EM";

    let formData = new FormData();
    formData.append("phoneNumber", phoneNumber);
    formData.append("authType", authType);

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

                modalEvent.success("", data.msgDesc, function(){
                    isRunning = true;

                    fn_startTimer();
                    $("#sendAuthNumBtn").text("재전송");
                    $(".certification_box2").show();
                });

            }else{
                modalEvent.danger("", data.msgDesc);
            }
        },
        error : function(xhr, status, error) {
            modalEvent.danger("", "정상적으로 수행되지 않았습니다. 인터넷에 연결되어 있는지 확인해 보시기 바랍니다.");
        },
        beforeSend:function(xhr){
            xhr.setRequestHeader("token", sessionStorage.getItem("token"));
        },
        complete:function(){

        }
    });
}

/****************************************************************************
 * 타이머 함수 실행
 ****************************************************************************/
function fn_startTimer() {

    // 남은 시간(초)
    let count = 180;
    let display = document.querySelector('#timer');

    let minutes, seconds;
    let timer = setInterval(function () {
        if(isRunning){
            minutes = parseInt(count / 60, 10);
            seconds = parseInt(count % 60, 10);
            minutes = minutes < 10 ? "0" + minutes : minutes;
            seconds = seconds < 10 ? "0" + seconds : seconds;
            display.textContent = "유효시간 " + minutes + ":" + seconds;
            isRunning = true;
        }else{
            clearInterval(timer);
            display.textContent = "";
            isRunning = false;
        }

        // 타이머 종료
        if (--count < 0) {
            clearInterval(timer);
            display.textContent = "";
            isRunning = false;
            $("#authNumber").val("");
        }
    }, 1000);
}

/****************************************************************************
 * 인증번호 확인 조회
 ****************************************************************************/
function fn_selectPhoneAuthCheck(){

    let phoneNumber       = $("#updateEmailModal #phoneNumber").val();
    let authNumber        = $("#authNumber").val();
    let reg_tel = /^[0-9]{10,11}$/;

    if(true != fn_emptyCheck(phoneNumber)){
        modalEvent.warning("조회", "휴대폰번호는 필수 값입니다.");
        return;
    }else{
        if(reg_tel.test(phoneNumber) != true) {
            modalEvent.warning("조회", "휴대폰번호는 숫자 10~11자리여야 합니다.");
            return;
        }else{
            phoneNumber = phoneNumber.replace("-", "");
        }
    }

    if(true != fn_emptyCheck(authNumber)){
        modalEvent.warning("조회", "인증번호를 입력하세요.");
        return;
    }

    let formData = new FormData();
    formData.append("phoneNumber", phoneNumber);
    formData.append("authNumber", authNumber);

    $.ajax({
        url: encodeURI('/mobilephoneauth/selectPhoneAuthCheck.do'),
        data: formData,
        dataType: 'json',
        processData: false,
        contentType: false,
        type: 'POST',
        async: false,
        success: function(data){
            if(data.msgCode=='0'){
                modalEvent.success("", data.msgDesc);
                phoneAuthYn = "Y";
                clearInterval(timer);
                isRunning = false;

            }else{
                modalEvent.danger("조회 오류", data.msgDesc);
                phoneAuthYn = "N";
                $("#insertUserBtn").attr("disabled", true);
            }
        },
        error : function(xhr, status, error) {
            modalEvent.danger("조회 오류", "정상적으로 수행되지 않았습니다. 인터넷에 연결되어 있는지 확인해 보시기 바랍니다.");
            phoneAuthYn = "N";
            $(".btn-right").attr("disabled", true);
        },
        beforeSend:function(xhr){
            xhr.setRequestHeader("token", sessionStorage.getItem("token"));
        },
        complete:function(){

        }
    });
}
