"use-strict"
let msgNmbr;
let regDt;
let msgCd;
let msgTitl;
let msgCtx;
let strDt;
let endDt;
const userIdVal = window.opener.$userId;
let userId;
let sendBtn;
const _code = 'FMSG';
let sendArr;
const updateColumns = {
    msg_nmbr : 0,
    reg_dt   : null,
    msg_cd   : null,
    msg_titl : null,
    msg_ctx  : null,
    str_dt   : null,
    end_dt   : null,
    user_id  : null,
}
let dateArr;
$(()=>{
    /**
     * 상단 닫기 버튼
     */
    const closeBtn = new dxBtn($('.close-btn'), '닫기', 'close', 'outlined', 80, 30, false, true);
    sendBtn = new dxBtn($('.send-btn'), '전송', 'fa fa-envelope-o', 'outlined', 80, 30, false, true);
    closeBtn.onClick(() => window.close());
    sendBtn.onClick(sendBtnClick)
    msgNmbr = new dxNumber($('.msg_nmbr'), 'outlined', 150, 30, 1, 9999999999, null, getNewNumber(), 'msg_nmbr', null, true);
    regDt = new dxDate($('.reg_dt'), 'yyyy-MM-dd HH:mm:ss', '등록일자', 200, 30, 'datetime', null, 'reg_dt');
    regDt.setReadOnly(true);
    regDt.setValue(new Date());
    userId = new dxTxt($('.user_id'), 'user_id', 20, '작성자', 150, 30, userIdVal, true, null);
    msgTitl = new dxTxt($('.msg_titl'), 'msg_title', 100, '제목', 550, 30, null, false, '제목을 입력해주세요');
    msgCd   = new dxSelect($('.msg_cd'), 'outlined', 200, 30, 'cmmn_cd_kor_nm', 'cmmn_cd', false, 'msg_cd', '메시지 유형');
    strDt   = new dxDate($('.str_dt'), 'yyyy-MM-dd HH:mm:ss', '유효 시작일시', 200, 30, 'datetime', null, 'str_dt');
    endDt   = new dxDate($('.end_dt'), 'yyyy-MM-dd HH:mm:ss', '유효 종료일시', 200, 30, 'datetime', null, 'end_dt');
    msgCtx  = new dxTxtArea($('.msg_ctx'), 'msg_ctx', 500, '메시지 내용', '100%', '100%', null, false, '작성하실 내용을 입력해주세요');
    strDt.setValue(new Date());
    endDt.setValue(new Date());
    msgTitl.focus();
    fetchCodeData();
    sendArr = [
        msgNmbr,
        regDt,
        userId,
        msgCd,
        msgTitl,
        strDt,
        endDt,
        msgCtx,
    ]
    dateArr = [
        regDt,
        strDt,
        endDt,
    ]
})
/**
 * 메시지 유형 코드 데이터 수신
 */
function fetchCodeData() {
    getDataAsync('/api/database/code/cmmn-cd/' + encodeURIComponent(_code), recvCdData);
}

/**
 * 메시지 전송 이벤트
 * @returns 유효하지 않는 값일 경우 리턴
 */
function sendBtnClick(){
    const msgNmbrVal = msgNmbr.getValue();
    const alertMsg   = '글 번호 : ' + msgNmbrVal + '<br>';
    const updateData = {...updateColumns};
    for (let send of sendArr) {
        if (send.isNull()){
            return alertWarning(alertMsg + '필수 항목을 입력해주세요. ['+ send.label +']', null, send);
        }
        else if ((send.column === 'str_dt' || send.column === 'end_dt') && send.isValidation()){
            return alertWarning(alertMsg + '형식에 맞게 입력해주세요. ['+ send.label +']', null, send);
        }
        else if (send.getByte() > send.max) {
            return alertWarning(alertMsg + send.max + ' 바이트 이내로 입력해주세요. ['+ send.label +']', null, send);
        }
        else {
            if (!dateArr.includes(send)){
                updateData[send.column] = send.getValue();
            }
            else {
                updateData[send.column] = send.getSendDateValue();
            }
        }
    }
    if (updateData.str_dt > updateData.end_dt) {
        return alertWarning(alertMsg + ' 유효 시작일시가 유효 종료일시보다 큽니다.', null, endDt);
    }
    console.log(updateData);
    const result = postInsertUpdate('',updateData);
    if (result > 0) {
        alertConfirm(alertMsg + '메시지 전송이 완료되었습니다.');
    }
}

/**
 * 메시지 유형 코드 데이터 수신
 * @param {*} jsonData Api 호출 데이터
 */
function recvCdData(jsonData){
    msgCd.setDataSource(jsonData);
    if (jsonData.length > 0) {
        msgCd.setValue(jsonData[0][msgCd.valueExpr]);
    }
}

/**
 * 메시지 번호 호출 함수
 * @returns 신규 메시지 번호
 */
function getNewNumber(){
    let msgNmbrVal = 1;
    return msgNmbrVal;
}