package com.kbstar.eai.inbound.action; 

import com.eactive.eai.adapter.AdapterGroupVO;
import com.eactive.eai.adapter.AdapterManager;
import com.eactive.eai.agent.firstaccount.ShareMemory;
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 EBEFirstAccountRequestAction 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);   
		}
		
		//집중계좌번호 호출 로직
		ShareMemory sm = ShareMemory.getInstance();
		String accNum = sm.getAccoutName();
		
		for(int i=0; i<key.length; i++) {
			
			//집중계좌 관련 추가 로직
			//기본값 0000 이거나 null이면  아래로직 Pass
			if(!"0000".equals(accNum) && accNum != null){
				String[] parseAccount = accNum.split(";");
				if( "0200500".equals(key[i]) ) {
					byte[] resCode = new byte[14];
					System.arraycopy(message, 107, resCode, 0, 14);
					for (int k = 0; k < parseAccount.length; k++) {
						if(parseAccount[k].equals(new String(resCode).trim())){
							key[i] = key[i] + "F";
						}
					}
				}else if( "0200200".equals(key[i]) ) {
					byte[] resCode = new byte[14];
					System.arraycopy(message, 94, resCode, 0, 14);
					for (int k = 0; k < parseAccount.length; k++) {
						if(parseAccount[k].equals(new String(resCode).trim())){
							key[i] = key[i] + "F";
						}
					}
				}
			}
			
			//불능거래 동일 GUID 채번 문제 해결을 위한 우회 로직 추가
			if( "0210200".equals(key[i]) ) {
				byte[] resCode = new byte[3];
				System.arraycopy(message, 20, resCode, 0, 3);
				if(!new String(resCode).equals("000")){
					key[i] = key[i] + "X";
				}
			}
			//----------------------------------------
			key[i] = eaiBizCode.trim() + key[i];
		}
		
		return key;
	}
	
	 public String getDescription() {
		return "키추출방식 : 어댑터업무코드[3]+추출키값+집중계좌로직[F 추가?]";
	}
	
//	public static void main(String[] atgs ) {
//		byte[] message = "0248HDRELB02104000004000430201002111245423000007420100211004CN300000740040049277060060000060704095823902  0000000000001000공무원연금급여　　　　　　　　　　　　　0701                                36013704003051                                        ".getBytes();
//		//byte[] message = "0303HDR0300402102005000004816900000217092811193800400000217092811193905502500000051709281119390190140000    000000000001000000000000000000000000010000홍길동　　　　　　　테스트　　　　　　　00000000000481690000　　　　　　　　　　                                                                             ".getBytes();
//		byte[] resCode = new byte[3];
//		System.arraycopy(message, 20, resCode, 0, 3);
//	
//		if(!new String(resCode).equals("000")){
//			System.out.println("not 000");
//		}else{
//			System.out.println("000");
//		}
//		
//		/*
//		 String key = "";
//		 if("430".equals(new String(resCode))) {
//		 key = key + "430";
//		 }
//		 System.out.println(key);
//		 */
//		System.out.println("["+new String(resCode).trim()+"]");
//		String dd = "0000";
//		if(!"0000".equals(dd) && dd != null){
//			String[] parseAccount = dd.split(",");
//			System.out.println(parseAccount[0]);
//			
//		}else{
//			System.out.println("null");
//		}
//		
//		
//	}
} 
