package com.eactive.eai.batch.code;

import com.eactive.eai.common.dao.BaseDAO;
import com.eactive.eai.common.dao.DAOException;
import com.eactive.eai.common.exception.ExceptionUtil;

import java.sql.ResultSet;
import java.util.HashMap;

/**
* 1. 기능 : 각종 메시지를 코드로 관리하기 위한 Rule 정보 테이블에 대한 Data Access Object 클래스
* 2. 처리 개요 : 각종 메시지를 코드로 관리하기 위한 Rulw 정보에 대한 DB 로직을 처리한다.
* *     -
* 3. 주의사항
*
* @author  :
* @version : v 1.0.0
* @see : 관련 기능을 참조
* @since   :
*/
public class CodeMessageDAO extends BaseDAO implements CodeMessageQuery
{

    /**
    * 1. 기능 :  메시지/코드 Rule 정보 전체를 SELECT하는 메서드
    * 2. 처리 개요 : 메시지/코드 Rule 정보 전체를 SELECT 한다.
    *     -
    * 3. 주의사항
    *
    * @return   코드, 메시지를 저장하고 있는 Properties 객체
    * @exception    DAOException    JDBC 관련 오류(SQLException)
    **/
    public HashMap<String, CodeMessageVO> getAllMessages() throws DAOException {
        HashMap<String, CodeMessageVO> allMsg = new HashMap<String, CodeMessageVO>();
        ResultSet rs = null;
        CodeMessageVO cmv = null;

        try {
            this.connect(GET_ALL_MESSAGES);
            rs = executeQuery();
            while(rs.next()) {
                cmv = new CodeMessageVO();
                cmv.setMsgKey            (rs.getString("Msg"                ));
                cmv.setMsgTxt            (rs.getString("MsgCtnt"            ));
                cmv.setMsgEtc            (rs.getString("TreatMatrCtnt"      ));
                cmv.setSmsSendType       (rs.getString("SMSSendYn"          ));
                cmv.setItsmObstclGrdDstcd(rs.getString("ITSMObstclGrdDstcd" ));
                allMsg.put(cmv.getMsgKey(), cmv);
            }
            return allMsg;
        } catch(Exception e) {
            throw new DAOException(ExceptionUtil.getErrorCode(e, "BECEAIMCD101"));
        } finally {
            disconnect();
        }
    }

    /**
     *  지정된 메시지코드를 가지는 코드메시지 레코드를 읽어서 리턴한다.
     */
    public CodeMessageVO getOneCodeMessage(String msg) throws DAOException {
        ResultSet rs = null;
        try {
            this.connect(GET_ONE_MESSAGE);
            this.preparedStatement.setString(1, msg);
            rs = this.executeQuery();

            CodeMessageVO cmv = null;
            while(rs.next()) {
                cmv = new CodeMessageVO();
                cmv.setMsgKey            (rs.getString("Msg"                ));
                cmv.setMsgTxt            (rs.getString("MsgCtnt"            ));
                cmv.setMsgEtc            (rs.getString("TreatMatrCtnt"      ));
                cmv.setSmsSendType       (rs.getString("SMSSendYn"          ));
                cmv.setItsmObstclGrdDstcd(rs.getString("ITSMObstclGrdDstcd" ));
            }
            return (cmv);
        }  catch(Exception e) {
            //ExceptionUtil.getErrorCode() 사용 불가 (무한 LOOP 발생)
            throw new DAOException( "코드 [" + msg + "] 의 레코드를 TSEAIBP05 테이블 에서 찾을 수 없습니다." );
        } finally {
            this.disconnect();
        }
    }
}
