package com.eactive.eai.message.service;

import java.util.Properties;

import com.eactive.eai.common.message.EAIMessage;
import com.eactive.eai.inbound.processor.ProcessVO;
import com.eactive.eai.message.StandardMessage;

/**
 * 
 */
public interface StandardMessageCoordinator {

	/**
	 * 전달된 표준메시지 파싱후 후처리
	 * 
	 * @param standardMessage
	 * @param paramObject
	 */
	public void coordinateAfterParsing(StandardMessage standardMessage, Object paramObject, Properties prop);

	/**
	 * 비표준 메시지일경우 Rule정보로부터 표준메시지 생성후 후처리
	 * 
	 * @param standardMessage
	 * @param prop
	 */
	public void coordinateAfterCreateMessageByRule(StandardMessage standardMessage, Object paramObject, Properties prop);

	/**
	 * 표준전문 송신 전 메시지 조립 전 처리
	 *
	 * @param standardMessage
	 */
	public void coordinateBeforeStandardMessageSend(StandardMessage standardMessage, String msgType, String charset);

	/**
	 * 표준 메시지일경우 ReturnObject 에서 처리
	 * 
	 * @param standardMessage
	 */
	public void coordinateInReturnObject(StandardMessage standardMessage);

	/**
	 * 인바운드에러에서 표준전문 오류응답주기전
	 * 
	 * @param standardMessage
	 */
	public void coordinateBeforeInboundErrorResponse(StandardMessage standardMessage);

	/**
	 * 표준전문 에러 셋팅 및 
	 *   응답이 true 일경우 업무데이터에 오류메시지 설정 (현재 JSON만 컨트롤) 
	 *   응답이 false일경우 업무데이터에 null처리
	 * 
	 * @param standardMessage
	 * @param mapper
	 * @param errCode
	 * @param errMsg
	 * @return
	 */
	public boolean coordinateSetStandardMessageError(StandardMessage standardMessage, InterfaceMapper mapper,
			String errCode, String errMsg);

	/**
	 * 표준전문 복원후
	 * 
	 * @param standardMessage
	 * @param errCode
	 * @param errMsg
	 */
	public void coordinateAfterRestored(StandardMessage restoredMessage, StandardMessage responseMessage);
	
	/**
	 * 표준전문 복원후
	 * 
	 * @param standardMessage
	 * @param errCode
	 * @param errMsg
	 * @return 
	 */
	public boolean coordinateIsWaitCheckForSync(StandardMessage responseMessage);
	
	/**
	 * Timeout 값
	 * 
	 * @param eaiMessage
	 * @return 타임아웃값
	 */
	public int coordinateForTimeoutCodeToValue(EAIMessage eaiMessage);
	
	/**
	 * 표준전문 validation
	 * @param standardMessage
	 * @param vo
	 * @return
	 */
	public boolean coordinateValidation(StandardMessage standardMessage, ProcessVO vo);
	
	
	/**
	 * 비표준 동기 응답 수신 후 표준전문 처리
	 * 
	 * @param responseMessage
	 */
	public void coordinateAfterRecvNonStdSyncResponse(StandardMessage responseMessage);


	/**
	 * RequestProcess 400 응답 로그 전 표준 메시지 조작 처리
	 *
	 * @param standardMessage
	 * @param processVO
	 * @param prop
	 * @param charset
	 */
	public void coordinateBeforeResponse(StandardMessage standardMessage, ProcessVO processVO, Properties prop, String charset);
}
