package biz.cms_NhsSysInfoRcv;

import java.util.HashMap;

import kr.fujitsu.com.ffw.daemon.net.ActionSocket;
import kr.fujitsu.com.ffw.daemon.net.server.ServerAction;

import org.apache.log4j.Logger;
import com.google.gson.Gson;

import biz.comm.COMMBiz;
import biz.comm.COMMLog;

public class NhsSysInfoRcvAction extends ServerAction {

		private static Logger logger = Logger.getLogger(NhsSysInfoRcvAction.class);
		
		/**
		 * 키오스크 응답 요청 port :9011
		 * 
		 * @param ActionSocket
		 * @return
		 * @throws Exception
		 */
		@Override
		public void execute(ActionSocket actionSocket) throws Exception {
			
			String rcvBuf = "";
			int ret =0;
			int inq_type = 0;
			String dataMsg = "";
			String retValue = "OK!";
			String rcvDataBuf = "";
			String sendMsg = "";
			HashMap<String, String> hmCommon = new HashMap<String, String>();
			HashMap<String, String> hmData = new HashMap<String, String>();
			
			COMMLog df = new COMMLog();
			
			Gson gson = new Gson();
			HashMap hmInqData = new HashMap();
			
			NhsSysInfoDAO dao = new NhsSysInfoDAO();
			
			try {  
				 
				rcvBuf = ((String) actionSocket.receive());
				
				if( rcvBuf.length() < COMMBiz.CM_LENS + 2 ) { 				
					return;
				}
				
				// Set Work Start Time(업무시작시간설정)
				df.setStartTime();		// 공통 로그 참조 변수를 이용 Logging 작업 ???
				
				df.setConnectionInfo(actionSocket.getSocket().getInetAddress()
						.getHostAddress().toString(),
						String.valueOf(actionSocket.getSocket().getPort()), logger,
						"SysInfo"); // Connection Info logging  --park07  
				
				hmCommon = COMMBiz.getData(rcvBuf, COMMBiz.CM_HEADER);
				// Compare to see if MsgType message type value is IRT(전문구분값이 IRT인지 비교한다).
				if (!(COMMBiz.getCommMsgType(hmCommon, COMMBiz.SYSINQ))) {
					return;
				}
				// TRAN Date(TRAN일자)
				String tranYmd = COMMBiz.getCommTranYMD(hmCommon);
				rcvDataBuf = rcvBuf.substring(COMMBiz.CM_LENS);			
				
				hmInqData = COMMBiz.jSonParsing2(rcvDataBuf) ;
				inq_type = Integer.parseInt((String)hmInqData.get("INQ_TYPE"));
				switch( inq_type ) {
				
				case 1: //고객구매이력 요청
					df.execute("CUSTHISTORY");
					dataMsg = dao.getCustBuyHistory(hmCommon, hmInqData, df);
					ret = COMMBiz.toInteger(dataMsg.substring(0, 2), 99);
					dataMsg = dataMsg.substring(2);
					break;
				case 2: //제품 마스터 수정내역 실시간 요청
					df.execute("CHANGEITEMINFO");
					dataMsg = dao.getChangeItemInfo(hmCommon, hmInqData, df);
					ret = COMMBiz.toInteger(dataMsg.substring(0, 2), 99);
					dataMsg = dataMsg.substring(2);
					break;
				case 3: // 프로그램/컨텐츠 압축 파일 요청
					df.execute("BAESINREQ");
	  
					dataMsg = dao.getBaesinReqProc(hmCommon, hmInqData, df); 
					ret = COMMBiz.toInteger(dataMsg.substring(0, 2), 99);
					dataMsg = dataMsg.substring(2);
					break;
				case 4: //단말기 정보 전송
					df.execute("POSSTATUSINFO");
					dataMsg = dao.setDeviceInfo(hmCommon, hmInqData, df); 
					ret = COMMBiz.toInteger(dataMsg.substring(0, 2), 99);
					dataMsg = dataMsg.substring(2);
					break;
				case 5: //비회원 적립안내 문구 알림톡 전송
					df.execute("SENDNEWCUSTOMER");
					dataMsg = dao.setSendMsgNewCustomer(hmCommon, hmInqData, df); 
					ret = COMMBiz.toInteger(dataMsg.substring(0, 2), 99);
					dataMsg = dataMsg.substring(2);
					break;
				case 6 :// 파일 요청 응답
					df.execute("BAESIN_RES");
					ret = dao.setBaesinResNew(hmCommon, hmInqData, df); 

					df.CommLogger("debug start ");  
					dataMsg =COMMBiz.makeMapToSendData(hmInqData);
	 				break;
				}
				
				
				
				// 배신정보 전송 결과 업데이트(전송건수가 있을때)
				if ((inq_type == 3 ) && dataMsg.length() > 0 ) {
					//2016.09.05 변경 -- 배신정보 전송 1개에서 --> 여러개로 전송처리로변경 
					// 2017.07.03 주석 삭제 처리 
					if(hmInqData.containsKey("FILE_GROUP")){ 
						ret = dao.setBaesinReqStatus(hmCommon, hmInqData,dataMsg,  df);  
					}
				}
				
			}
			catch(Exception e) {
				// 029=HOST APPL ERR
				ret = 29;
				retValue = "[ERROR] " + e.getMessage();
				df.CommLogger("▶ " + retValue);
			}
			
			try {
				// Make Response Message Data(응답 전문데이타 만들기)
	 			sendMsg = COMMBiz.makeSendData(hmCommon, dataMsg.getBytes().length, ret);
			
				// Send Response Data(응답 데이타 전송)
				if (actionSocket.send(sendMsg + dataMsg)) {
			
				} else {
					df.CommLogger("[sms>pos] SEND[" + (sendMsg+dataMsg).getBytes().length + "] ERROR");
				}
				
				
			}catch(Exception e) {
				retValue = "[ERROR] Finally Error  " + e.getMessage();
				df.CommLogger("▶ " + retValue);
			}finally {
 
				df.close("nhsSysInfo", retValue);
			}
			
		}
}
