let isRunning = false;
let phoneAuthYn = "N";

let userData = {};
let certCellFlag = "N";
let num = 60 * 3; // 몇분을 설정할지의 대한 변수 선언
let myVar;
let duplicateSuccess = false;
/****************************************************************************
 * 정보입력 페이지 이동
 ****************************************************************************/
function fn_joinInputIntro() {
    let serviceAgreement = $('#service_agreement').prop('checked');
    let collectionAgreement = $('#collection_agreement').prop('checked');
    let marketingAgreement = $('#marketing_agreement').prop('checked');

    if (!serviceAgreement) {
        modalEvent.warning('등록', '서비스 이용 약관은 필수 동의 사항입니다.')
        return;
    }
    if (!collectionAgreement) {
        modalEvent.warning('등록', '개인정보 수집 및 이용 약관은 필수 동의 사항입니다.')
        return;
    }

    let param = "?serviceAgreement=" + serviceAgreement;
    param += "&collectionAgreement=" + collectionAgreement;
    param += "&marketingAgreement=" + marketingAgreement;
    location.href = '/mobilejoin/joinInputIntro.do'+param;
}

/****************************************************************************
 * 가입 완료버튼
 ****************************************************************************/
function fn_join(){
    if(""==loginType){ //snsType MU:메이드유,K:카카오,N:네이버,A:애플
        loginType = "MU";
    }
    let membershipAccount          = $("#membershipAccount").val();
    let membershipPassword         = $("#membershipPassword").val();
    let passwordCheck              = $("#passwordCheck").val();
    let userName                   = $("#userName").val();
    let phoneNumber                = $("#phoneNumber").val().replace(/-/g, "");
    let introUser                  = $("#introUser").attr('data');

    let reg_password = /^(?=.*[a-zA-Z])((?=.*\d)(?=.*\W)).{8,20}$/;

    /* 디바이스 정보 추가 ( 임시 하드코딩 )*/
    // let phoneType                  = 'A'
    // let deviceUuid                 = 'e3fc0d3e-e1c7-49ea-bce3-6994721eb711'
    // let pushKey                    = ''
    // let modelName                  = 'galaxy'
    // let osVersion                  = '1'

    if(true != fn_emptyCheck(membershipAccount)){
        modalEvent.warning("등록", "아이디를 입력하세요");
        return;
    }else if(membershipAccount.length<4){
        modalEvent.warning("등록", "아이디는 최소 4자 이상 입력해야합니다.");
        return;
    }else if(!duplicateSuccess&&"MU"==loginType){
        modalEvent.warning("등록", "아이디 중복여부를 확인하세요.");
        return;
    }

    if("MU"==loginType){
        if(true != fn_emptyCheck(membershipPassword)){
            modalEvent.warning("등록", "비밀번호를 입력하세요");
            return;
        }else if(!reg_password.test(membershipPassword)) {
			modalEvent.warning("등록", "비밀번호는 숫자,영문,특수문자 조합 최소 8자리 최대 20자리로 입력해야합니다.");
			return;
		}else{
            if(membershipPassword!==passwordCheck){
                modalEvent.warning("등록", "비밀번호가 일치하지 않습니다.");
                return;
            }
        }
    }

    if(true != fn_emptyCheck(marketingAgreement)){
        modalEvent.warning("등록", "마케팅 수신 동의여부가 없습니다.");
        return;
    }

    if(true != fn_emptyCheck(userName)){
        modalEvent.warning("등록", "성함이 없습니다.");
        return;
    }else if(userName.length<2){
        modalEvent.warning("등록", "성함은 최소 2자 이상 입력해야합니다.");
        return;
    }

    if(true != fn_emptyCheck(phoneNumber)){
        modalEvent.warning("등록", "휴대폰번호가 없습니다.");
        return;
    }

    if('Y'!==phoneAuthYn){
        modalEvent.warning("등록", "휴대폰인증을 진행하세요");
        return;
    }

    let formData = new FormData();
    formData.append("membershipAccount", membershipAccount);
    formData.append("membershipPassword", membershipPassword);
    formData.append("passwordCheck", passwordCheck);
    formData.append("userName", userName);
    formData.append("phoneNumber", phoneNumber);
    formData.append("introUser", introUser);
    formData.append("loginType", loginType);
    formData.append("marketingAgreement", marketingAgreement);

    // formData.append("phoneType", phoneType);
    // formData.append("deviceUuid", deviceUuid);
    // formData.append("pushKey", pushKey);
    // formData.append("modelName", modelName);
    // formData.append("osVersion", osVersion);

    $.ajax({
        url: encodeURI('/mobilejoin/insertUser.do'),
        data: formData,
        dataType: "json",
        processData: false,
        contentType: false,
        type: 'POST',
        async: true,
        success: function (data) {
            if ('0' == data.msgCode) {
                modalEvent.success("성공", "회원가입 되었습니다.", function () {
                    fn_joinToLogin(membershipAccount, membershipPassword);
                })
            } else {
                modalEvent.danger("등록 오류", data.msgDesc, function (){
                    // location.href = '/mobilelogin/loginIntro.do';
                     fn_leftFormAction("/mobilehome/loginIntro.do");
                });
            }
        },
        error: function (xhr, status, error) {
            modalEvent.danger("등록 오류", "등록 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
        },
        beforeSend: function () {

        },
        complete: function () {

        }
    })
}

/****************************************************************************
 * 회원가입 후 로그인
 ****************************************************************************/
function fn_joinToLogin(param1, param2){
    let ajaxUrl = "";

    if('MU'==loginType){
        ajaxUrl = "/login.do";
    }else{
        ajaxUrl = "/snsLogin.do";
    }

    let formData = new FormData();
    formData.append("loginId", param1);
    formData.append("password", param2);
    formData.append("loginType", loginType);
    formData.append("deviceUuid", deviceUuid1);
	formData.append("phoneType", phoneType1);
	formData.append("modelName", modelName1);
	formData.append("osVersion", osVersion1);
	formData.append("pushKey", pushKey1);
	formData.append("appVersion", appVersion1);
	formData.append("deviceYn", deviceYn);

    $.ajax({
        url: encodeURI('/mobilelogin'+ajaxUrl),
        data: formData,
        dataType: 'json',
        processData: false,
        contentType: false,
        type: 'POST',
        async: true,
        success: function(data){
            if('0'==data.msgCode){
                fn_leftFormAction("/mobilehome/homeIntro.do");
            }
            else{
                modalEvent.danger("로그인 오류", data.msgDesc);
            }
        },
        error : function(xhr, status, error) {
            modalEvent.danger("로그인 오류", "조회 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
        },
        beforeSend:function(){

        },
        complete:function(){

        }
    });
}

/****************************************************************************
 * 아이디 중복확인
 ****************************************************************************/
function fn_duplicateCheck(){
    let membershipAccount          = $("#membershipAccount").val();
    if(true != fn_emptyCheck(membershipAccount)){
        modalEvent.warning("등록", "아이디를 입력하세요");
        return;
    }else if(membershipAccount.length<4){
        modalEvent.warning("등록", "아이디는 최소 4자 이상 입력해야합니다.");
        return;
    }

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

    $.ajax({
        url: encodeURI('/mobilejoin/checkMembershipId.do'),
        data: formData,
        dataType: "json",
        processData: false,
        contentType: false,
        type: 'POST',
        async: true,
        success: function (data) {
            if ('0' == data.msgCode) {
                if (data.success === 'true') {
                    modalEvent.success("", "사용 가능한 아이디입니다.", function () {
                        duplicateSuccess = true;
                        $('.first').append('<a id="idUseYn" style="font-size: small;color: #3985EA;">사용 가능한 아이디</a>')
                        checkAllFields();
                    })
                } else {
                    modalEvent.success("", "이미 존재하는 아이디입니다.", function () {
                        $('.first').append('<a id="idUseYn" style="font-size: small;color: red;">중복된 아이디</a>')
                    })
                }
            } else {
                modalEvent.danger("등록 오류", "이미 사용중인 아이디입니다. 다른 아이디를 입력해주세요.");
            }
        },
        error: function (xhr, status, error) {
            modalEvent.danger("등록 오류", "등록 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
        },
        beforeSend: function () {

        },
        complete: function () {

        }
    })
}

/****************************************************************************
 * 추천인 아이디 확인
 ****************************************************************************/
function fn_checkUser(){
    let introUser        = $("#introUser").val();

    if(true != fn_emptyCheck(introUser)){
        return;
    }

    let formData = new FormData();
    formData.append("membershipAccount", introUser);

    $.ajax({
        url: encodeURI('/mobilejoin/checkMembershipId.do'),
        data: formData,
        dataType: "json",
        processData: false,
        contentType: false,
        type: 'POST',
        async: true,
        success: function (data) {
            if ('0' == data.msgCode) {
                if($('#introUserCheck')){
                    $('#introUserCheck').remove();
                }
                if (0<data.rows.length) {
                    $('#introUser').parent().parent().append('<a id="introUserCheck" style="font-size: small;color: #3985EA;">확인되었습니다.</a>')
                    $('#introUser').attr('data',data.rows.muUserId);
                } else {
                    $('#introUser').parent().parent().append('<a id="introUserCheck" style="font-size: small;color: red;">존재하지 않는 추천인 입니다.</a>')
                }
            } else {
                modalEvent.danger("등록 오류", data.msgDesc);
            }
        },
        error: function (xhr, status, error) {
            modalEvent.danger("등록 오류", "등록 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
        },
        beforeSend: function () {

        },
        complete: function () {

        }
    })
}
/****************************************************************************
 * 휴대폰 본인인증
 ****************************************************************************/
function fn_sendAuthNum(){

    let phoneNumber = $("#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 = $("#phoneNumber").val();
    let authType          = "JN";

    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       = $("#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;

                // checkAllFields();
                const completeButton = $('.button_box button');

                completeButton.addClass('active');
                completeButton.attr("disabled", false);
            }else{
                modalEvent.danger("조회 오류", data.msgDesc);
                phoneAuthYn = "N";
                checkAllFields();

            }
        },
        error : function(xhr, status, error) {
            modalEvent.danger("조회 오류", "정상적으로 수행되지 않았습니다. 인터넷에 연결되어 있는지 확인해 보시기 바랍니다.");
            phoneAuthYn = "N";
            checkAllFields();

        },
        beforeSend:function(xhr){
            xhr.setRequestHeader("token", sessionStorage.getItem("token"));
        },
        complete:function(){

        }
    });
}

function checkAllFields(changeElement) {
    const requiredFields = document.querySelectorAll('#membershipAccount,#membershipPassword,#passwordCheck,#userName,#phoneNumber,#authNumber');
    let allFilled = true;
    const completeButton = $('.button_box button');

    if(changeElement && changeElement[0]===$("#membershipAccount")[0]){
        duplicateSuccess=false;
        allFilled = false;
        $("#idUseYn").remove();
    }

    requiredFields.forEach(function (field) {
        if (field.value.trim() === '') {
            allFilled = false;
        }
        if(!duplicateSuccess){
            allFilled = false;
        }
        if('Y'!==phoneAuthYn){
            allFilled = false;
        }
    });

    if(allFilled) {
        completeButton.addClass('active');
        completeButton.attr("disabled", false);
    }else {
        completeButton.removeClass('active')
        completeButton.attr("disabled", true);
    }
}

function alertFunc() {
    var min = num / 60;
    min = Math.floor(min);

    var sec = num - (60 * min);
    sec = sec > 9 ? sec : "0"+sec ;

    if(num == 0){
        certCellFlag = "T";
        clearInterval(myVar) // num 이 0초가 되었을대 clearInterval로 타이머 종료
    }
    num--;
}
/****************************************************************************
 * 페이지 init
 ****************************************************************************/
function fn_pageInit() {
    getDeviceInfo();

    if(''!=loginType && ''!=snsEmail){
        $("#membershipAccount").val(snsEmail);
        $("#membershipAccount").css("disabled",true);

        $("#duplicateCheckBtn").css("display","none");
        $("#passwordLi").css("display","none");
    }
}

/****************************************************************************
 * 페이지 event
 ****************************************************************************/
function fn_pageEvent() {
    $('#membershipAccount,#membershipPassword,#passwordCheck,#userName,#phoneNumber,#authNumber').each(function () {
        $(this).on('change', ()=>checkAllFields($(this)));
    });

    $("#introUser").change(function () {
        fn_checkUser();
    });

    // 다음버튼
    $("#btn_joinInputIntro").click(function () {
        fn_joinInputIntro();
    });

    // 전체동의 체크
    $("#all_agreement").change(function () {
        const checkboxes = document.querySelectorAll('input[name="join_agreement"]');
        checkboxes.forEach(function (checkbox) {
            checkbox.checked = this.checked;
        }, this);
    });
}

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

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