package com.eactive.eai.batch.job.jobItem; 

import com.eactive.eai.batch.doc.BatchDoc;
import com.eactive.eai.batch.rule.phaseinfo.PhaseInfoVO;

import java.util.ArrayList;

public interface TelegramService 
{ 
    public final String ALIGNMENT_RIGHT = "NN";
    public final String FIELD_NO_LENGTH = "XX";
    public void setEAIBatchMessage(BatchDoc pBatchDoc) ;
    public BatchDoc getEAIBatchMessage();
    
    /**
     *  Telegram 전문별 특별한 수행기능 처리
     */
    
    public boolean doPreExecute();
    
    public boolean doPreExecuteAfterCopy();
    
    public boolean doPostExecute();
    
    public boolean doExecute();
    
    public boolean doValidation();
    


    
    public int getTelegramLength();
    
    public void setReceiveData(byte[] recvByteArray);
    
    public byte[] getFieldDataByIndex(int idx);
    
    public byte[] getSendData();
    
    public void   setFieldDataByIndex(int idx, byte[] buf);
    
    public int getFieldCount();
    
    public String getFieldLength(int idx);
    
    /**
     * parameter로 전달되는 인덱스가 비정형 필드인지 체크하고, 
     * SEND : 해당 비정형 필드의 송신 길이를 리턴
     * RECV : 해당 비정형 필드의 수신 길이를 리턴
     */
    public int getCalculatedLength(int idx);
    
    public String getFieldProperty(int idx);
    
    public void setTelegramCode(String strTelegramCode);

    public void setNextStageInfo(ArrayList<PhaseInfoVO> stageList);
    
    public PhaseInfoVO getNextStage() ;
    public String      getRealRecvTelegram();
    
    public boolean doInformalField(int idx, byte[] data, int length);
    
    public int getSendLength();
    
    public int getInformalFieldSendData(int idx, byte[] data);
    
    public String getConditionTxt() ;
    public void setConditionTxt(String strConsitionTxt);
    /**
     * 각 전문이 응답전문일 때, 전문에 조립된 응답코드를 구하는 함수
     * 각 Telegram 클래스에서 구현되어야 함.  기본은 '000'으로 정상처리 응답코드를 리턴해주도록 한다.
     */
    public String getSendResponseCode() throws Exception ; 
    
    public String toString();
    
    //------------------------------------------------------------------------------------
    public int getRemainDataLength(); //<-- 전문결정용 텔레그램에서 통신 자원상에 남아있는 전문의 남아있는 데이터 수를 계산한다.
    
    //-------------------------------------------------- 실제전문 내용을 읽어들이는 곳...
    public String getFldTelegramType();
    public void   setFldTelegramType(String strTelegramType);
    public String getFldOpCode();
    public void   setFldOpCode(String strOpCode);
    public String getFldTrClass();
    public void   setFldTrClass(String strTrClass);
    
    // 전문종별
    public String getTelegramType(); 
    public void setTelegramType(String telegramType);
    // 거래 구분코드
    public String getTrClass() ;
    // 응답코드
    public String getResCode();
    // 업무관리코드   
    public String getOpCode();
    // 전문 해체 후 응답코드
    public String getResolveResponseCode();
    //전문 해체 후 응답코드
    public void setResolveResponseCode(String code);
} 
