package com.eactive.eai.custom.message;

import org.apache.commons.lang3.StringUtils;

import com.eactive.eai.message.StandardItem;
import com.eactive.eai.message.StandardMessage;
import com.eactive.eai.message.filter.MessageFilter;
import com.eactive.eai.message.manager.StandardMessageManager;
import com.eactive.eai.message.service.InterfaceMapper;
import com.ext.eai.common.stdmessage.STDMessageKeys;

@SuppressWarnings("serial")
public class FlatMessageFilterKAKAOCARD implements MessageFilter {

	@Override
	public StandardMessage doFilter(StandardMessage message) {

		// 카카오은행 기준
		// 전체길이(8) : 전체길이포함 전체
		// 헤더 : 150
		// 공통부: 850
		// DATA헤더 : 10
		// DATA : ?
		// 종료 : @@ : 2
		// 예) DATA가 320byte이면 전체길이는 1332 임

		// 요청시 MESSAGE 부가 없음
		// 응답시 MESSAGE 부가 있음

		boolean isMessageHidden = true;
		// 아래로직은 표준전문에서 요청일때 MESSAGE부가 안보이고 응답일때 MESSAGE부 보이게 설정
		StandardItem mesgDmanDvcd = message.findItem("Header.MESG_DMAN_DVCD");
		if (mesgDmanDvcd != null && StringUtils.equals(mesgDmanDvcd.getValue(), "R")) {
			isMessageHidden = false;
		}

		// message부 보이기 여부
		StandardItem msg = message.findItem("MSG");
		// 아래로직은 표준전문에서 요청일때 MESSAGE부가 안보이고 응답일때 MESSAGE부 보이게 설정
		msg.setHidden(isMessageHidden);

		int totalSize = 0; // 전체 길이 ( 메시지여부에 따라 변경됨)
		int ioSize = 0; // 데이터부 길이
		int messageSize = 0; // 메시지부 길이

		try {
			ioSize = message.getBizDataBytes().length;
			// 데이터부 길이 설정
			StandardItem dataHedrLen = message.findItem("DataPart.DataHeader.DATA_HEDR_LEN");
			dataHedrLen.setValue(String.valueOf(ioSize));
		} catch (Exception e) {

		}
		try {
			messageSize = message.getBytesDataLengthForPath("MSG");
			if (messageSize > 10) {
				StandardItem msgLen = message.findItem("MSG.MSG_HEDR_LEN");
				msgLen.setValue(String.valueOf(messageSize - 10));
			}
			StandardItem msgCnt = message.findItem("MSG.OUTPUT_MSG_NCNT");

		} catch (Exception e) {

		}

		if (isMessageHidden) {
			// 전체길이 = 150 + 850 + 메시지부길이(X) + DATA부(10) + bizData(?) +종료부(2)
			totalSize = 150 + 850 + 0 + 10 + ioSize + 2;
		} else {
			// 전체길이 = 150 + 850 + 메시지부길이(배열존재(출력메시지개수)) + DATA부(10) + bizData +종료부(2)
			totalSize = 150 + 850 + messageSize + 10 + ioSize + 2;
		}
		// 전체 길이 셋팅
		try {
			message.setLlData(String.valueOf(totalSize));
		} catch (Exception e) {

		}

		return message;
	}
}