package com.eactive.eai.batch.message;

import com.eactive.eai.batch.common.CalendarUtil;
import com.eactive.eai.batch.doc.BatchDoc;
import com.eactive.eai.batch.doc.BatchDoc.BatchMsg;
import com.eactive.eai.common.util.Logger;
import com.eactive.eai.common.util.UUIDGenerator;

public class EAIBatchMsgManager
{
	//파일로거
	private static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);

    public static BatchDoc createBatchMsg(boolean isInitailize)
	{
        BatchDoc batchMsgDoc = new BatchDoc();
        BatchMsg msg = batchMsgDoc.addNewBatchMsg();
        msg.addNewHeader();
        msg.addNewBody();
		msg.addNewPhaseinfo();
		if (isInitailize) initailzeBatchMsg(batchMsgDoc);
		batchMsgDoc.getBatchMsg().getBody().setWLIServerName(System.getProperty("weblogic.Name"));
        logger.info("[ EAIBatchMsgManager ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        logger.info("[ EAIBatchMsgManager ] ■ BatchMsgDoc 생성됨.");
        logger.info("[ EAIBatchMsgManager ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
		return batchMsgDoc;
	}

    public static BatchDoc createBatchMsg(String layerCode, boolean isInitailize)
	{
        BatchDoc batchMsgDoc = createBatchMsg(isInitailize);
		batchMsgDoc.getBatchMsg().getHeader().setLayerCode(layerCode);
		return batchMsgDoc;
	}

    public static BatchDoc createBatchMsg(String layerCode, String subLayerCode, boolean isInitailize)
	{
        BatchDoc batchMsgDoc = createBatchMsg(isInitailize);
		return updateBatchMsg(batchMsgDoc, layerCode, subLayerCode);
	}

    public static BatchDoc createBatchMsgWithUUID(boolean isInitailize)
	{
        BatchDoc batchMsgDoc = createBatchMsg(isInitailize);
        String uuid = UUIDGenerator.getUUID();
		batchMsgDoc.getBatchMsg().getHeader().setUUID(uuid);
		batchMsgDoc.getBatchMsg().getBody().setSubUUID(uuid);
        logger.info("[ EAIBatchMsgManager ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        logger.info("[ EAIBatchMsgManager ] ■ UUID  생성됨 (SUB_UUID 동일설정) : ["+ uuid +"]");
        logger.info("[ EAIBatchMsgManager ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
		return batchMsgDoc;
	}

    public static BatchDoc createBatchMsgWithUUID(String layerCode, boolean isInitailize)
	{
        BatchDoc batchMsgDoc = createBatchMsgWithUUID(isInitailize);
		batchMsgDoc.getBatchMsg().getHeader().setLayerCode(layerCode);
		return batchMsgDoc;
	}

    public static BatchDoc createBatchMsgWithUUID(String layerCode, String subLayerCode, boolean isInitailize)
	{
        BatchDoc batchMsgDoc = createBatchMsgWithUUID(isInitailize);
		return updateBatchMsg(batchMsgDoc, layerCode, subLayerCode);
	}

    public static BatchDoc updateBatchMsg(BatchDoc batchMsgDoc, String layerCode, String subLayerCode)
	{
        batchMsgDoc.getBatchMsg().getHeader().setLayerCode(layerCode);
        batchMsgDoc.getBatchMsg().getBody().setSubLayerCode(subLayerCode);
		return batchMsgDoc;
	}

    public static BatchDoc updateBatchMsgWithStageTime(BatchDoc batchMsgDoc, String layerCode, String subLayerCode)
	{
		updateBatchMsg(batchMsgDoc, layerCode, subLayerCode);
		String startTime = CalendarUtil.getCurrentTimeNoDash();
        batchMsgDoc.getBatchMsg().getHeader().setBatchStartTime(startTime);  // 배치메시지 생성시간
        batchMsgDoc.getBatchMsg().getBody().setPhaseStartTime(startTime);    // 단계 시작시간
        batchMsgDoc.getBatchMsg().getBody().setPhaseEndTime("");             // 단계 종료시간
		return batchMsgDoc;
	}

	public static BatchDoc initailzeBatchMsg(BatchDoc batchMsgDoc)
	{
		batchMsgDoc.getBatchMsg().setTelegramBody  ("");
		batchMsgDoc.getBatchMsg().setTelegramHeader("");
		batchMsgDoc.getBatchMsg().setFileHeader    ("");
		batchMsgDoc.getBatchMsg().setFileTrailer   ("");

		batchMsgDoc.getBatchMsg().getHeader().setUUID              ("");
		batchMsgDoc.getBatchMsg().getHeader().setTRXID             ("");
		batchMsgDoc.getBatchMsg().getHeader().setLayerCode         ("");
		batchMsgDoc.getBatchMsg().getHeader().setProcessType       ("");
		batchMsgDoc.getBatchMsg().getHeader().setProcessName       ("");
		batchMsgDoc.getBatchMsg().getHeader().setProcessCode       ("");
		batchMsgDoc.getBatchMsg().getHeader().setInstitutionCode   ("");
		batchMsgDoc.getBatchMsg().getHeader().setInstitutionName   ("");
//		batchMsgDoc.getBatchMsg().getHeader().setInstituaionType   ("");
		batchMsgDoc.getBatchMsg().getHeader().setJobCode           ("");
		batchMsgDoc.getBatchMsg().getHeader().setScheduleCode      ("");
		batchMsgDoc.getBatchMsg().getHeader().setFileName          ("");
		batchMsgDoc.getBatchMsg().getHeader().setFilePath          ("");
		batchMsgDoc.getBatchMsg().getHeader().setUserID            ("");
		batchMsgDoc.getBatchMsg().getHeader().setUserName          ("");
		batchMsgDoc.getBatchMsg().getHeader().setUserPassword      ("");
		batchMsgDoc.getBatchMsg().getHeader().setScheduleSTime     ("");
		batchMsgDoc.getBatchMsg().getHeader().setScheduleETime     ("");
		batchMsgDoc.getBatchMsg().getHeader().setRenamedFileName   ("");
		batchMsgDoc.getBatchMsg().getHeader().setFlowCode          ("");
		batchMsgDoc.getBatchMsg().getHeader().setSystemConnCode    ("");
		batchMsgDoc.getBatchMsg().getHeader().setTotRecCnt         (-1);
		batchMsgDoc.getBatchMsg().getHeader().setFileSize          (-1);
		batchMsgDoc.getBatchMsg().getHeader().setBlockSize         ( 0);
		batchMsgDoc.getBatchMsg().getHeader().setSequenceSize      ( 0);
		batchMsgDoc.getBatchMsg().getHeader().setRemoteIP          ("");
		batchMsgDoc.getBatchMsg().getHeader().setPort              ("");
		batchMsgDoc.getBatchMsg().getHeader().setBatchStartTime    ("");
		batchMsgDoc.getBatchMsg().getHeader().setRequestResponse   ("");
		batchMsgDoc.getBatchMsg().getHeader().setSendRecv          ("");
		batchMsgDoc.getBatchMsg().getHeader().setRuleCode          ("");
		batchMsgDoc.getBatchMsg().getHeader().setRuleDesc          ("");
//		batchMsgDoc.getBatchMsg().getHeader().setProtocol          ("");
		batchMsgDoc.getBatchMsg().getHeader().setBizCode           ("");
		batchMsgDoc.getBatchMsg().getHeader().setFileErrorPath     ("");
		batchMsgDoc.getBatchMsg().getHeader().setPacketSize        ( 0);
		batchMsgDoc.getBatchMsg().getHeader().setRecLen            ( 0);
		batchMsgDoc.getBatchMsg().getHeader().setBaseDate          ("");

		batchMsgDoc.getBatchMsg().getBody().setSubUUID             ("");
		batchMsgDoc.getBatchMsg().getBody().setWLIServerName       ("");
		batchMsgDoc.getBatchMsg().getBody().setPortNo              ("");
		batchMsgDoc.getBatchMsg().getBody().setNodeCount           ( 0);
		batchMsgDoc.getBatchMsg().getBody().setSubLayerCode        ("");
		batchMsgDoc.getBatchMsg().getBody().setFlowPhaseCode       ("");
		batchMsgDoc.getBatchMsg().getBody().setLastPhaseCode       ("");
		batchMsgDoc.getBatchMsg().getBody().setNextPhaseCode       ("");
		batchMsgDoc.getBatchMsg().getBody().setPhaseType           ("");
		batchMsgDoc.getBatchMsg().getBody().setLastPhaseType       ("");
		batchMsgDoc.getBatchMsg().getBody().setNextPhaseType       ("");
		batchMsgDoc.getBatchMsg().getBody().setSndMsgCode          ("");
		batchMsgDoc.getBatchMsg().getBody().setRcvMsgCode          ("");
		batchMsgDoc.getBatchMsg().getBody().setPhaseStartTime      ("");
		batchMsgDoc.getBatchMsg().getBody().setPhaseEndTime        ("");
		batchMsgDoc.getBatchMsg().getBody().setLastPhaseStartTime  ("");
		batchMsgDoc.getBatchMsg().getBody().setLastPhaseEndTime    ("");
		batchMsgDoc.getBatchMsg().getBody().setActionTag           ("");
		batchMsgDoc.getBatchMsg().getBody().setRecallTag           ("");
		batchMsgDoc.getBatchMsg().getBody().setTimeoutInterval     ("");
		batchMsgDoc.getBatchMsg().getBody().setRetryCount          ( 0);
		batchMsgDoc.getBatchMsg().getBody().setBlockNum            ( 0);
		batchMsgDoc.getBatchMsg().getBody().setSeqNum              ( 0);
		batchMsgDoc.getBatchMsg().getBody().setMissingNmField      ("");
		batchMsgDoc.getBatchMsg().getBody().setMissingNmCount      ( 0);
		batchMsgDoc.getBatchMsg().getBody().setCurFileSize         ( 0);
		batchMsgDoc.getBatchMsg().getBody().setRecCnt              ( 0);
		batchMsgDoc.getBatchMsg().getBody().setLastResCode         ("");
		batchMsgDoc.getBatchMsg().getBody().setErrorCode           ( 0);
		batchMsgDoc.getBatchMsg().getBody().setErrorMsg            ("");
		batchMsgDoc.getBatchMsg().getBody().setRecvedMsg           ("");

		batchMsgDoc.getBatchMsg().getPhaseinfo().setRuleCode          ("");
		batchMsgDoc.getBatchMsg().getPhaseinfo().setPhaseCode         ("");
		batchMsgDoc.getBatchMsg().getPhaseinfo().setPhaseType         ("");
		batchMsgDoc.getBatchMsg().getPhaseinfo().setFlowClassName     ("");
		batchMsgDoc.getBatchMsg().getPhaseinfo().setLengthTelegramID  ("");
		batchMsgDoc.getBatchMsg().getPhaseinfo().setLengthClassName   ("");
		batchMsgDoc.getBatchMsg().getPhaseinfo().setLengthMsgCode     ("");
		batchMsgDoc.getBatchMsg().getPhaseinfo().setLengthFieldIndex  (-1);
		batchMsgDoc.getBatchMsg().getPhaseinfo().setPhaseSeq          ("");
		batchMsgDoc.getBatchMsg().getPhaseinfo().setPhaseTelegramID   ("");
		batchMsgDoc.getBatchMsg().getPhaseinfo().setPhaseClassName    ("");
		batchMsgDoc.getBatchMsg().getPhaseinfo().setPhaseMsgCode      ("");
		batchMsgDoc.getBatchMsg().getPhaseinfo().setTelegramTypeValue ("");
		batchMsgDoc.getBatchMsg().getPhaseinfo().setBizCodeValue      ("");
		batchMsgDoc.getBatchMsg().getPhaseinfo().setControlCodeValue  ("");
		batchMsgDoc.getBatchMsg().getPhaseinfo().setResponseCodeValue ("");
		return batchMsgDoc;
	}


}
