class FimsFormFields extends FormFields {

    /**
     * form 에 json data set
     * element tag에 data-fmt-type 으로 데이타 format이 지정된 경우 해당 포맷으로 출력
     * @param {object} formObj document.querySelector('form')
     * @param {object} jsonData json type data
     */
    set(obj){

        document.querySelectorAll(this.children).forEach(input => {

            let prop = input.getAttribute("data-map")
                || input.name
                || input.id;
            if (!prop) return;

            let dataItem = obj instanceof DataItem,
                value = dataItem ? obj.getValue(prop) : obj[prop];

            if ("radio" == input.type) {
                if (value && value == input.value)
                    input.checked = true;
            } else if("checkbox" == input.type) {
                if (value && value == input.value)
                    input.checked = ("Y" === value);
            } else if(input.tagName == "SELECT") {
                for(let option of input.options) {
                    if(option.value == value){
                        option.selected = true;
                    } else {
                        option.selected = false;
                    }
                }
            } else {
                if(value == null){
                    value = "";
                }
                // element data-fmt-type에 정의된 format 적용
                // dt - yyyy-mm-dd HH:mm:ss, day - yyyy-mm-dd, time - HH:mm:ss, number - #,###
                if(input.dataset.fmtType){
                    const fmtType = input.dataset.fmtType;
                    switch (fmtType) {
                        case 'dt' :
                            value = dateTimeFormat.format(value);
                            break;
                        case 'day' :
                            value = dateFormat.format(value);
                            break;
                        case 'time' :
                            value = timeFormat.format(value);
                            break;
                        case 'number' :
                            value = numberFormat.format(value);
                            break;
                        default:
                            break;

                    }
                }
                if(input.name){

                    input.value = value;

                    //보안모드 마스킹 항목
                    if(input.tagName === 'INPUT' && input.id && input.classList.contains("privacy")){
                        let maskVal = value.replace(/[0-9a-zA-Z]/g, "*");
                        document.getElementById("mask-"+input.id).value = maskVal;
                    }
                }

            }
        });


    }

    get() {
        let obj = {};
        document.querySelectorAll(this.children).forEach(input => {
            let property = input.name || input.id;
            let value = input.value;
            if("radio" == input.type) {
                if(input.checked)
                    obj[property] = value;
            } else if("checkbox" == input.type) {
				if(input.checked){
					if(obj[property]){
						obj[property] += ","+value;	
					} else {
						obj[property] = value;
					}
				}
			} else {
                if(input.dataset.fmtType){
                    const fmtType = input.dataset.fmtType;
                    switch (fmtType) {
                        case 'dt' :
                            value = value.replaceAll("-","").replaceAll(":","").replaceAll(" ","");
                            break;
                        case 'day' :
                            value = value.replaceAll("-","");
                            break;
                        case 'time' :
                            value = value.replaceAll(":","");
                            break;
                        case 'number' :
                            value = value.replaceAll(",","");
                            break;
                        default:
                            break;

                    }
                }
                obj[property] = value;
            }

        });
        return obj;
    }
}