package com.kbstar.eai.inbound.action; 

import com.eactive.eai.adapter.AdapterGroupVO;
import com.eactive.eai.adapter.AdapterManager;
import com.eactive.eai.common.exception.ExceptionUtil;
import com.eactive.eai.common.util.Logger;
import com.eactive.eai.common.util.MessageKeyExtractor;
import com.eactive.eai.inbound.action.ActionException;
import com.eactive.eai.inbound.action.RequestActionSupport;

/** 
* 1. 기능 : Inbound Adapter를 통해 전달받은 비표준메시지에서 KESA를 생성하기 위한 키값을 추출
* 2. 처리 개요 : 
*     - 어뎁터의 업무그룹코드를 키값앞에 추가한다.
*     - MessageKeyExtractor를 통해 Adapter별 추출 Rule에 따라 메시지를 구분할 수 있는 키값을 추출한다.
* 3. 주의사항 
*
* @author  : 
* @version : v 1.0.0
* @see :
* @since : 
*/
public class EREAdapterRequestAction extends RequestActionSupport
{ 
    /** 
	* 1. 기능 : Inbound Adapter를 통해 전달받은 비표준메시지에서 KESA를 생성하기 위한 키값을 추출
	* 2. 처리 개요 : 
	*     - MessageKeyExtractor를 통해 Adapter별 추출 Rule에 따라 메시지를 구분할 수 있는 키값을 추출한다.
    * 3. 주의사항 
    *
    * @param message Object 타입의 요청메시지
    * @return String 비표준메시지의 메시지키값
    * @exception
    **/
    public String[] perform(Object message) throws ActionException
    {
        byte[] tmp = null;
        String[] key = null;
        
        AdapterManager adapterManager = AdapterManager.getInstance();
        AdapterGroupVO adptGrpVO = adapterManager.getAdapterGroupVO(adapterGroupName);        
		String eaiBizCode = null;
		if(adptGrpVO != null) {
        	eaiBizCode = adptGrpVO.getEaiBizCode();
        }
        else {
        	eaiBizCode = getEaiBizCodeFromAdapterName(adapterGroupName);
        }
        
        if(message instanceof byte[]) {
            try  {
                key = MessageKeyExtractor.getMessageKeyValue(this.adapterGroupName, message);  
            } catch(Exception e) {
                throw new ActionException(ExceptionUtil.getErrorCode(e, "RECEAIIRA001"));
            }
            tmp = (byte[])message;
            if (logger.isInfo()) logger.info(adapterName+"] received data >> "+ new String(tmp)); 
        } else {
            try  {
                key = MessageKeyExtractor.getMessageKeyValue(this.adapterGroupName, message);  
            } catch(Exception e) {
                throw new ActionException(ExceptionUtil.getErrorCode(e, "RECEAIIRA001"));
            }
            if (logger.isInfo()) logger.info(adapterName+"] received data >> "+ message);   
        }
        
        
        
        for(int i=0; i<key.length; i++) {
        	//----------------------------------------
        	// 2016.08.30 
            // 전자 예외로직 추가
            if( "0210300000".equals(key[i]) ) {
            	byte[] resCode = new byte[3];
                System.arraycopy(message, 24, resCode, 0, 3);
                
                if("430".equals(new String(resCode))) {
                	key[i] = key[i] + "430";
                }
            }else if( "0210400000".equals(key[i]) ) {
            	byte[] resCode = new byte[3];
            	System.arraycopy(message, 24, resCode, 0, 3);
            
            	if("430".equals(new String(resCode))) {
            		key[i] = key[i] + "430";
            	}
            }
            key[i] = eaiBizCode.trim() + key[i];
        }
       
        
        return key;
    }
    
	 public String getDescription() {
		return "키추출방식 : 어댑터업무코드[3]+추출키값+전자예외로직[3]";
	}
	 
//	   public static void main(String args[]) throws Exception {
//	   test();
//}

//  private static void test() throws Exception {
//    	byte[] message = "0248HDRELB02104000004000430201002111245423000007420100211004CN300000740040049277060060000060704095823902  0000000000001000공무원연금급여　　　　　　　　　　　　　0701                                36013704003051                                        ".getBytes();
//    	
//    	byte[] resCode = new byte[3];
//    	System.arraycopy(message, 24, resCode, 0, 3);
//        
//    	String key = "";
//        if("430".equals(new String(resCode))) {
//        	key = key + "430";
//        }
//        System.out.println(key);
//    }
	 
} 
