package com.eactive.eai.common.bizkey;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.eactive.eai.common.bizkey.loader.BizKeyLoader;
import com.eactive.eai.common.dao.BaseDAO;
import com.eactive.eai.common.dao.DAOException;
import com.eactive.eai.common.exception.ExceptionUtil;
import com.eactive.eai.common.util.Logger;
import com.eactive.eai.data.entity.onl.bizkey.BizKey;

@Service
@Transactional
public class BizKeyDAO extends BaseDAO {
	private static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);

	@Autowired
	private BizKeyLoader bizKeyLoader;

	public Map<String, BizKeyVO> getAllBizKeys() throws Exception {

		try {
			List<BizKey> bizKeys = bizKeyLoader.findAllOrderByDefault();
			Map<String, BizKeyVO> msgKeys = new HashMap<>();
			if (logger.isInfoEnabled()) {
				logger.info("[ @@ Load BizKey Configuration - starting >>>>>>>>>>>>>>>>> ]");
			}
			for (BizKey bizKey : bizKeys) {
				String key = bizKey.getId().getEaisvcname() + bizKey.getId().getEtractdstcd();
				BizKeyVO vo = msgKeys.get(key);

				if (vo == null) {
					vo = new BizKeyVO(bizKey.getId().getEaisvcname(), bizKey.getId().getEtractdstcd());
					msgKeys.put(key, vo);
				}

				vo.addBizKeyFld(bizKey.getMsgdstcd(), bizKey.getBzwkfldname());

			}
			if (logger.isInfoEnabled()) {
	            logger.info("[>>Load BizKey Configuration - ended ]");
	        }
			return msgKeys;

		} catch (Exception e) {
			throw new DAOException(ExceptionUtil.getErrorCode(e, "RECEAICBM101"));
		}
	}

	public Map<String, BizKeyVO> getBizKey(String eaiSvcCd, String exrClsNm) throws Exception {
		try {
			Map<String, BizKeyVO> msgKeys = new HashMap<>();
			Collection<BizKey> bizKeys = bizKeyLoader.findByIdEaisvcnameAndIdEtractdstcd(eaiSvcCd, exrClsNm);
			logger.info("[ @@ Load BizKey getBizKey Configuration - starting >>>>>>>>>>>>>>>>> ]");

			for (BizKey bizKey : bizKeys) {
				String key = bizKey.getId().getEaisvcname() + bizKey.getId().getEtractdstcd();
				BizKeyVO vo = msgKeys.get(key);

				if (vo == null) {
					vo = new BizKeyVO(eaiSvcCd, exrClsNm);
					msgKeys.put(key, vo);
				}

				vo.addBizKeyFld(bizKey.getId().getFldprcssno(), bizKey.getMsgdstcd(), bizKey.getBzwkfldname());
			}

			if (logger.isInfoEnabled()) {
	            logger.info("BizKeyFldVO in getBizKey():");
	            for (BizKeyVO vo : msgKeys.values()) {
	                for (BizKeyFldVO fldVO : vo.getAlMsgFlds()) {
	                    logger.info("BizKeyFld getBizKey --->> " + fldVO.toString());
	                }
	            }
	            logger.info("[>>Load BizKey getBizKey Configuration - ended ]");
	        }
			return msgKeys;

		} catch (Exception e) {
			throw new DAOException(ExceptionUtil.getErrorCode(e, "RECEAICBM205"));
		}
	}

}
