/* ##############################################################
	설  명 : [Modal]고객 신체기록 등록 팝업
	작성일 : 2024. 03. 14.
	작성자 : NTsoft
	수정일 	        수정자 	 수정내용
	-------         -------- ---------------------------
	2024. 03. 14.	NTsoft 	 최초 생성
*/
let regHeight      = /^\d{1,3}(?:\.\d)?$/; // 키: 최대 3자리 숫자, 소수점 한 자리 허용
let regWeight      = /^\d{1,3}(?:\.\d)?$/; // 몸무게: 최대 3자리 숫자
let regMuscleMass  = /^\d{1,3}(?:\.\d)?$/; // 골격근량: 최대 3자리 숫자, 소수점 한 자리 허용
let regFatMass     = /^\d{1,3}(?:\.\d)?$/; // 체지방량: 최대 3자리 숫자, 소수점 한 자리 허용
let regFatPercent  = /^\d{1,2}(?:\.\d)?$/; // 체지방률: 최대 2자리 숫자, 소수점 한 자리 허용
let regBmi         = /^\d{1,2}(?:\.\d)?$/; // BMI: 최대 2자리 숫자, 소수점 한 자리 허용

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

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

        let today = new Date();
        let date = today.getFullYear() + '-' + ('0' + (today.getMonth() + 1)).slice(-2) + '-' + ('0' + today.getDate()).slice(-2);
        let isForeigner ='KR'!== muUserData.nationality
        let birthday=muUserData.birthday?convertToRegistrationNumberFormat(muUserData.birthday,muUserData.gender,isForeigner):'-';
        $('.modal-body #writeDate').text(date);
        $('.modal-body #userName').text(muUserData.userName);
        $('.modal-body #nationality').text(muUserData.nationality??'-');
        $('.modal-body #birth').text(birthday);
        $('.modal-body #phoneNumber').text(muUserData.phoneNumber);
        $('.modal-body #memberName').text(muUserData.memberName);

        document.getElementById("height").addEventListener("input", function(event) {
            formatInputData1(this);
        });
        document.getElementById("weight").addEventListener("input", function(event) {
            formatInputData1(this);
        });
        document.getElementById("muscleMass").addEventListener("input", function(event) {
            formatInputData1(this);
        });
        document.getElementById("fatMass").addEventListener("input", function(event) {
            formatInputData1(this);
        });
        document.getElementById("fatPercent").addEventListener("input", function(event) {
            formatInputData1(this);
        });
        document.getElementById("bmi").addEventListener("input", function(event) {
            formatInputData1(this);
        });

    },
    /* 데이터 선택 */
    setSelect:function(selectNumber) {
        let checkedData = dataList[selectNumber];
        if(dataList==null||checkedData==undefined){
            return ;
        }

        if( userPhysicalInsertModal.callback )  {
            userPhysicalInsertModal.callback(checkedData);
        }
        userPhysicalInsertModal.close();
    },
    /****************************************************************************
     * 고객 신체 정보 등록
     ****************************************************************************/
    //저장
    save:function() {
        let height              = $("#height").val();
        let weight              = $("#weight").val();
        let muscleMass          = $("#muscleMass").val();
        let fatMass             = $("#fatMass").val();
        let fatPercent          = $("#fatPercent").val();
        let bmi                 = $("#bmi").val();
        let memo                = $("#memo").val();


        /*if(!fn_emptyCheck(height)){
            modalEvent.warning('등록',"키 정보가 없습니다.",()=>{$("#height").focus()});
            return false;
        }
        else if(!regHeight.test(height)){
            modalEvent.warning('등록',"키는 최대 3자리 숫자여야 합니다.",()=>{$("#height").focus()});
            return false;
        }

        if(!fn_emptyCheck(weight)){
            modalEvent.warning('등록',"몸무게 정보가 없습니다.",()=>{$("#weight").focus()});
            return false;
        }
        else if (!regWeight.test(weight)) {
            modalEvent.warning('등록',"몸무게는 최대 3자리 숫자여야 합니다.",()=>{$("#weight").focus()});
            return false;
        }

        if (!regMuscleMass.test(muscleMass)) {
            modalEvent.warning('등록',"골격근량은 최대 3자리 숫자여야 합니다.",()=>{$("#muscleMass").focus()});
            return false;
        }

        if (!regFatMass.test(fatMass)) {
            modalEvent.warning('등록',"체지방량은 최대 3자리 숫자여야 합니다.",()=>{$("#fatMass").focus()});
            return false;
        }

        if (!regFatPercent.test(fatPercent)) {
            modalEvent.warning('등록',"체지방률은 최대 2자리 숫자여야 합니다.",()=>{$("#fatPercent").focus()});
            return false;
        }

        if (!regBmi.test(bmi)) {
            modalEvent.warning('등록',"BMI는 최대 2자리 숫자여야 합니다.",()=>{$("#bmi").focus()});
            return false;
        }*/

        modalEvent.info("수정", "신체기록을 등록하시겠습니까?", function() {

            let formData = new FormData();
            formData.append("muUserId", muUserId);
            formData.append("menuClass", menuClass);
            formData.append("height", height);
            formData.append("weight", weight);
            formData.append("muscleMass", muscleMass);
            formData.append("fatMass", fatMass);
            formData.append("fatPercent", fatPercent);
            formData.append("bmi", bmi);
            formData.append("memo", memo);


            $.ajax({
                url: encodeURI('/webuser/insertPhysical.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 () {
                            if( userPhysicalInsertModal.callback )  {
                                userPhysicalInsertModal.callback();
                            }
                            userPhysicalInsertModal.close();
                        });

                    } else {
                        modalEvent.danger("오류", data.msgDesc);
                    }
                },
                error: function (xhr, status, error) {
                    modalEvent.danger("등록 오류", "신체정보 등록 중 오류가 발생하였습니다. 잠시후 다시시도하십시오.");
                },
                beforeSend: function () {
                },
                complete: function () {
                }
            });
        })
    },
    /*
     * 팝업
     * callback : 콜백함수, reqParam: 팝업파라미터
     */
    popup:function(callback, reqParam) {
        // 초기화 후 열기
        userPhysicalInsertModal.init();

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

        setTimeout(function(){
            $('#userPhysicalInsertModal').modal({keyboard:false, backdrop:'static'});
        }, 200);

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

		setTimeout(function(){
			$('#userPhysicalInsertModal').remove();
		},500);
    },
    HtmlTemplate :`
        <div class="modal body_info_modal fade" id="userPhysicalInsertModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-header">
                        <p class="title">신체기록</p>
                    </div>

                    <div class="modal-body">
                        <div class="form_box">
                            <ul>
                                <li class="first">
                                    <p>성함</p>
                                    <p id="userName">-</p>
                                </li>
                                <li>
                                    <p>국적</p>
                                    <p id="nationality">-</p>
                                </li>
                                <li>
                                    <p>생년월일</p>
                                    <p id="birth">-</p>
                                </li>
                                <li>
                                    <p>연락처</p>
                                    <p id="phoneNumber">-</p>
                                </li>
                            </ul>
                            <ul>
                                <li>
                                    <p>날짜</p>
                                    <p id="writeDate">-</p>
                                </li>
                                <li>
                                    <div class="input_box">
                                        <label>키</label>
                                        <input id="height" type="text" placeholder="0" />
                                        <p>cm</p>
                                    </div>
                                </li>
                                <li>
                                    <div class="input_box">
                                        <label>몸무게</label>
                                        <input id="weight" type="text" placeholder="0" />
                                        <p>kg</p>
                                    </div>
                                </li>
                                <li>
                                    <div class="input_box">
                                        <label>골격근량</label>
                                        <input id="muscleMass" type="text" placeholder="0" />
                                        <p>kg</p>
                                    </div>
                                </li>
                                <li>
                                    <div class="input_box">
                                        <label>체지방량</label>
                                        <input id="fatMass" type="text" placeholder="0" />
                                        <p>kg</p>
                                    </div>
                                </li>
                                <li>
                                    <div class="input_box">
                                        <label>체지방률</label>
                                        <input id="fatPercent" type="text" placeholder="0" />
                                        <p>%</p>
                                    </div>
                                </li>
                                <li>
                                    <div class="input_box">
                                        <label>BMI</label>
                                        <input id="bmi" type="text" placeholder="0" />
                                        <p>kg/m2</p>
                                    </div>
                                </li>
                            </ul>
                            <ul>
                                <li>
                                    <p>담당자</p>
                                    <p id="memberName">-</p>
                                </li>
                                <li>
                                    <div class="textarea_box">
                                        <label>메모</label>
                                        <textarea id="memo"></textarea>
                                    </div>
                                </li>
                            </ul>
                        </div>
                    </div>

                    <div class="modal-footer">
                        <div class="btn_box">
                            <button type="button" class="cancel_btn btnCancle">취소</button>
                            <button type="button" class="save_bth btnSave">저장</button>
                        </div>
                    </div>
                </div>
            </div>
        </div>`
};

document.getElementById('insertBtn').addEventListener('click',()=> {
    userPhysicalInsertModal.popup();
    let today = new Date();
    let date = today.getFullYear() + '-' + ('0' + (today.getMonth() + 1)).slice(-2) + '-' + ('0' + today.getDate()).slice(-2);
    let isForeigner ='KR'!== muUserData.nationality
    let birthday=muUserData.birthday?convertToRegistrationNumberFormat(muUserData.birthday,muUserData.gender,isForeigner):'-Z';
    $('.modal-body #writeDate').text(date);
    $('.modal-body #userName').text(muUserData.userName);
    $('.modal-body #nationality').text(muUserData.nationality??'-');
    $('.modal-body #birth').text(birthday);
    $('.modal-body #phoneNumber').text(muUserData.phoneNumber);
    $('.modal-body #memberName').text(muUserData.memberName);
})
function formatInputData1(inputElement) {
    // 입력된 키가 숫자나 소수점이 아닌 경우 입력을 막음
    inputElement.value = inputElement.value.replace(/[^\d.]/g, '');

    // 입력된 값에서 소수점이 두 번 이상 나타나면 제거
    inputElement.value = inputElement.value.replace(/(\..*)\./g, '$1');

    let value = inputElement.value;

    // 입력값이 소수점을 포함할 때
    if (value.indexOf('.') !== -1) {
        let parts = value.split('.');

        // 정수 부분이 3자리를 초과하면 자르고, 소수점 이하 한 자리까지만 허용
        if (parts[0].length > 3) {
            parts[0] = parts[0].substring(0, 3);
        }

        // 소수점 이하 자리수가 1자리를 초과하면 자름
        if (parts[1] && parts[1].length > 1) {
            parts[1] = parts[1].substring(0, 1);
        }

        inputElement.value = parts.join('.');
    } else {
        // 소수점이 없을 때
        if (value.length > 3) {
            inputElement.value = value.substring(0, 3);
        }
    }
}

function formatInputData2(inputElement) {
    // 입력된 키가 숫자나 소수점이 아닌 경우 입력을 막음
    inputElement.value = inputElement.value.replace(/[^\d.]/g, '');

    // 입력된 값에서 소수점이 두 번 이상 나타나면 제거
    inputElement.value = inputElement.value.replace(/(\..*)\./g, '$1');

    let value = inputElement.value;

    // 입력값이 소수점을 포함할 때
    if (value.indexOf('.') !== -1) {
        let parts = value.split('.');

        // 정수 부분이 2자리를 초과하면 자르고, 소수점 이하 한 자리까지만 허용
        if (parts[0].length > 2) {
            parts[0] = parts[0].substring(0, 2);
        }

        // 소수점 이하 자리수가 1자리를 초과하면 자름
        if (parts[1] && parts[1].length > 1) {
            parts[1] = parts[1].substring(0, 1);
        }

        inputElement.value = parts.join('.');
    } else {
        // 소수점이 없을 때
        if (value.length > 2) {
            inputElement.value = value.substring(0, 2);
        }
    }
}

function formatInputData3(inputElement) {
    inputElement.value = inputElement.value.replace(/\D/g, '');

    let value = inputElement.value;

    if (value.length > 3) {
        inputElement.value = value.substring(0, 3);
    }
}
function removeEventListeners() {
    document.getElementById("height").removeEventListener("input", formatInputData1);
    document.getElementById("weight").removeEventListener("input", formatInputData1);
    document.getElementById("muscleMass").removeEventListener("input", formatInputData1);
    document.getElementById("fatMass").removeEventListener("input", formatInputData1);
    document.getElementById("fatPercent").removeEventListener("input", formatInputData1);
    document.getElementById("bmi").removeEventListener("input", formatInputData1);
}
function convertToRegistrationNumberFormat(birthDate, gender, isForeigner) {
    const [year, month, day] = birthDate.split("-");
    let firstDigit;
    if (isForeigner) {
        if (parseInt(year) < 2000) {
            firstDigit = gender === "M" ? "5" : "6"; // Example logic for foreigners
        }else {
            firstDigit = gender === "M" ? "7" : "8";
        }

    } else {
        if (parseInt(year) < 2000) {
            firstDigit = gender === "M" ? "1" : "2";
        } else {
            firstDigit = gender === "M" ? "3" : "4";
        }
    }
    return `${year.substring(2)}${month}${day}-${firstDigit}******`;
}
