package biz.cms_NhsMasterDataRcv;

import java.net.SocketException;
import java.util.HashMap;

import org.apache.log4j.Logger;

import com.google.gson.Gson;


import biz.comm.COMMBiz;
import biz.comm.COMMLog;
import kr.fujitsu.com.ffw.daemon.net.ActionSocket;
import kr.fujitsu.com.ffw.daemon.net.server.ServerAction;


public class NhsMasterDataRcvAction extends ServerAction {

	private static Logger logger = Logger.getLogger(NhsMasterDataRcvAction.class);
	
	/**
	 * Receive data 9051 PORT(데이타를  9051 PORT로 받음).
	 * 
	 * @param ActionSocket
	 * @return
	 * @throws Exception
	 */
	@Override
	public void execute(ActionSocket actionSocket) throws Exception {
		// TODO Auto-generated method stub 
		int 	ret = 0;
		int		inq_type = 0;
		
		String  sendMsg = "";
		String  dataMsg = "";
		String	rcvBuf = "";
		String 	rcvDataBuf = "";
		String  retValue = "OK!";
		HashMap hmCommon = new HashMap();
		
		NhsMasterDataCrtExecutor mstEx = new NhsMasterDataCrtExecutor();
		
		
		COMMLog df = new COMMLog();
		
		HashMap hmInqData = new HashMap(); 
		
		try {
				rcvBuf = (String)actionSocket.receive(); 
				if( rcvBuf.length() < COMMBiz.CM_LENS + 2 ){ 
					return;
				}
				// set work start time(업무시작시간  설정)
				df.setStartTime();
				df.setConnectionInfo(actionSocket.getSocket().getInetAddress().getHostAddress().toString(),
									 String.valueOf(actionSocket.getSocket().getPort()),
									 logger,
									 "NhsMasterDataRcv");
				hmCommon = COMMBiz.getData(rcvBuf, COMMBiz.CM_HEADER);
				
				//COMMBiz.MASTER : 8 ( json field 개수 맞춰야 함)
				if (!(COMMBiz.getCommMsgType(hmCommon, COMMBiz.MASTER))) {
					df.CommLogger("[ERROR] COMMBiz.MASTER length ---> " + COMMBiz.MASTER );
					return;
				} 
				
				// CMS_LENS : 59 ( 헤더전문 뒤의 json 자르기)
				rcvDataBuf = rcvBuf.substring(COMMBiz.CM_LENS);
				
				//json parsing 된 데이터 haspmap 담기
				hmInqData = COMMBiz.jSonParsing2(rcvDataBuf) ;
				
				/*
				  000147 08      PCKR    002         0000007    20190208 55     00003     20190211 131751  0            000
				  123456 12      1234    1234        1234567890 12345678 12     12345     12345678 123456  1            123
				  msglen msgtype cmd_cd  sale_org_cd stor_cd    sale_dt  pos_no trade_no  sys_ymd  sys_hms encrypt_mode err_cd
					{
						"DATA_COUNT":"",
						"SUB_STOR_CD":"0000007",
						"RES_CD":"",
						"PROC_CD":"0",
						"UPD_DT":"20190208174302",
						"MASTER_DIV":"39",
						"STOR_CD":"0000007",
						"INQ_TYPE":"01"
					}
				00014608PCKR002 0000007   201902085500003201902111317510000{DATA_COUNT":"","SUB_STOR_CD":"0000007","RES_CD":"","PROC_CD":"0","UPD_DT":"20190208174302","MASTER_DIV":"39","STOR_CD":"0000007","INQ_TYPE":"01"}	
				*/
				
				inq_type = Integer.parseInt((String)hmInqData.get("INQ_TYPE"));  
				
				switch( inq_type ) {
				case 1: //NHS_SCREEN(점포별 대기화면)
					df.CommLogger("1   NHS_SCREEN 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_SCREEN(actionSocket, hmCommon, hmInqData, df);
					break;
				case 2:
					df.CommLogger("2   NHS_SCREEN_CONTENTS 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_SCREEN_CONTENTS(actionSocket, hmCommon, hmInqData, df);
					break;
				
				case 3:
					df.CommLogger("3   NHS_SCREEN_LAYER 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_SCREEN_LAYER(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 4:
					df.CommLogger("4   NHS_STORE_PRD_CATE 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_STORE_PRD_CATE(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 5:
					df.CommLogger("5   NHS_STORE_PRD_KEY 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_STORE_PRD_KEY(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 6:
					df.CommLogger("6   NHS_UI_TEMPLATE 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_UI_TEMPLATE(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 7:
					df.CommLogger("7   NHS_CPI_CONTENTS 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_CPI_CONTENTS(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 8:  //사용안함 2019.03.07
					df.CommLogger("8   NHS_CUST_BUY_HIST 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_CUST_BUY_HIST(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 9:
					df.CommLogger("9   NHS_LANG_MSG 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_LANG_MSG(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 10:
					df.CommLogger("10   NHS_LAYOUT 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_LAYOUT(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 11:
					df.CommLogger("11   NHS_PRD_CATE_L 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_PRD_CATE_L(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 12:
					df.CommLogger("12   NHS_PRD_CATE_M 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_PRD_CATE_M(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 13:
					df.CommLogger("13   NHS_PRD_MST 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_PRD_MST(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 14:
					df.CommLogger("14   NHS_OPTN_MST 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_OPTN_MST(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 15:
					df.CommLogger("15   NHS_PRD_OPTN_GRP 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_PRD_OPTN_GRP(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 16:
					df.CommLogger("16   NHS_PRD_OPTN 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_PRD_OPTN(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 17:
					df.CommLogger("17   NHS_PRD_CATE 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_PRD_CATE(actionSocket, hmCommon, hmInqData, df);
					break;	
					
				case 18:
					df.CommLogger("18   NHS_STOR_PRD_TAG 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_STOR_PRD_TAG(actionSocket, hmCommon, hmInqData, df);
					break;
				case 19:
					df.CommLogger("19  BR NHS_LINK_ITEM 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_LINK_ITEM(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 20:
					df.CommLogger("20  BR NHS_STOR_FLAVOR 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_STOR_FLAVOR(actionSocket, hmCommon, hmInqData, df);
					break;		
				case 21:
					df.CommLogger("21  MST_POS_OPTN 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_MST_POS_OPTN(actionSocket, hmCommon, hmInqData, df);
					break;	
				case 22:
					df.CommLogger("22  NHS_FUNC_INFO 호출 처리 중 ▶   " );
					dataMsg = mstEx.make_NHS_FUNC_INFO(actionSocket, hmCommon, hmInqData, df);
					break;		
				case 59:
					df.CommLogger("59 MST_PAY_DC	결제 할인 마스터  ▶   " );
					dataMsg = mstEx.make_MST_PAY_DC(actionSocket, hmCommon, hmInqData, df);
					break;		
					
				case 101:
					df.CommLogger("101 NHS_STOR_PRD_LINK_OPTN 호출 처리 중   ▶   " );
					dataMsg = mstEx.make_NHS_STOR_PRD_LINK_OPTN(actionSocket, hmCommon, hmInqData, df);
					break;	
				}
				
/*		

				1. 대기화면   
					 기존 로직에 하단 배너 1 row 생성 및 구분자 추가 
				2. 대기화면 컨텐츠
				     기존 로직에 nhs_banner 추가 및 구분자 추가 
				3. 대기화면 레이어
				     기존 로직에 하단 배너 1 row 생성 및 구분자 추가 
				4. 점포 제품 카테고리
				     기존 로직 동일   ---사용안함.......
				5. 제품 터치키
				     기존 로직에 추가 필드 적용
				6. UI 템플릿
				     기존 로직 동일 
				7. 캠페인 리소스
				     기존 로직 동일
				8. 고객구매이력 
					  사용안함	 
				9. Lang_msg
				     기존 로직 동일
				10. layout 
				      사용안함
				11. 제품카테고리 대분류
				      사용안함
				12. 제품카테고리 중분류
				      사용안함
				13. 제품 마스터
				    기존 로직 동일	  
				14. 부가옵션
				    기존 로직 동일
				15. 부가옵션 그룹
				    기존 로직 동일
				16. 제품별 부가옵션
				    기존 로직 동일
				17. 제품카테고리	
				    기존 로직 동일
				18. 점포별 제품별 태그
				    기존 로직 동일
				------------------19. 링크 상품 그룹(필요없음)
				--------------------	 추가 생성
				19. 링크 상품
				     추가 생성
				20. 점포별 플레이버
				     추가 생성
*/
		} catch(Exception e) {
			ret = 20;
			retValue = " Agent Action [ERROR]   1  :" + e.getMessage() + " desc -->"  + e.toString() ;
		}
		
		try {
			
 			sendMsg = COMMBiz.makeSendData(hmCommon, dataMsg.getBytes().length, ret); 
			if (actionSocket.send(sendMsg + dataMsg)) {
				df.CommLogger("▶ 2: SEND MSG: " + sendMsg + "/"
						+ sendMsg.getBytes().length);
				df.CommLogger("▶ 3: DATA MSG: " + dataMsg + "/"
						+ dataMsg.getBytes().length);	
			} else {
				df.CommLogger("▶ [ERROR]3: " + sendMsg + " ==>LEN: "
						+ sendMsg.getBytes().length);
			}
		} catch (SocketException e) {
			retValue = "Agent Action  [ERROR]  2" + e.getMessage();
			df.CommLogger("▶ " + retValue);
		} finally {
			
			df.close("NHSMASTERDATARCV", retValue);
		}
	}
}
