/*******************************************************************************
* All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEKKA0050004TPMA
*	ソースファイル名：JEKKA0050004TPMA.java
*	作成者			：
*   日付            ：2023年02月21日
*＜機能概要＞
*	プレミアムクラブポイント登録処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v66.00.00	2023/02/14	FJ) 松永	【ANK-4307-00-00】【eo定期】プレミアムクラブリニューアル対応
*				2023/05/18	FJ) 松永	【IT1-2023-0000016】API標準部品を使用した実装に変更
*				2023/07/21	FJ) 西窪	【#82591】マイナーアラーム出力対応
********************************************************************************/
package eo.ejb.cbs.mainproc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;
import com.k_opti.api_parts.client.constant.ApiClientConst;

import eo.ejb.cbs.cbsmsg.EKKA0050004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0050004CBSMsg1List;
import gyomu.JKKcommonApiKKA0050004;

/**
 * プレミアムクラブポイント登録処理部品です。
 * <br>
 * @author FJ
 *
 */
public class JEKKA0050004TPMA implements TemplateMainHandler
{
// IT1-2023-0000016 DEL START
//	/** 外部インターフェイスID **/
//	private static final String KKIFE502 = "KKIFE502";

//	/** サービスＩＤ **/
//	private static final String KKSV1021 = "KKSV1021";

//	/** サービスインターフェースＩＤ **/
//	private static final String KKSV102101SC = "KKSV102101SC";
// IT1-2023-0000016 DEL END
	
// IT1-2023-0000016 ADD START
	/**
	 * プレミアムクラブポイント登録処理実行
	 * 
	 * @param inCBSMsg
	 * @param inContext
	 */
	public static void executeKKIFE502(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		Map<String, Object> serviceMap = new LinkedHashMap<String, Object>();
		serviceMap.put(JKKcommonApiKKA0050004.IN_PARAM_FUNC_CODE, inCBSMsg.getString(EKKA0050004CBSMsg.FUNC_CODE));
		serviceMap.put(JKKcommonApiKKA0050004.IN_PARAM_SYSID, inCBSMsg.getString(EKKA0050004CBSMsg.SYSID));
		serviceMap.put(JKKcommonApiKKA0050004.IN_PARAM_TEKIYO_ST_YMD, inCBSMsg.getString(EKKA0050004CBSMsg.TEKIYO_ST_YMD));
		serviceMap.put(JKKcommonApiKKA0050004.IN_PARAM_PRESENT_KBN, inCBSMsg.getString(EKKA0050004CBSMsg.PRESENT_KBN));
		serviceMap.put(JKKcommonApiKKA0050004.IN_PARAM_PRESENT_PT_SU, inCBSMsg.getString(EKKA0050004CBSMsg.PRESENT_PT_SU));
		serviceMap.put(JKKcommonApiKKA0050004.IN_PARAM_SNS_SBT_CD, inCBSMsg.getString(EKKA0050004CBSMsg.SNS_SBT_CD));
		serviceMap.put(JKKcommonApiKKA0050004.IN_PARAM_SISK_SINS_EDA_NO, inCBSMsg.getString(EKKA0050004CBSMsg.SISK_SINS_EDA_NO));
		
		try
		{
			JKKcommonApiKKA0050004 instance = new JKKcommonApiKKA0050004();
			
			Map<String, Object> resposeMap = instance.callApiKKA0050004(serviceMap);
			// 結果を受信
			inCBSMsg.set(EKKA0050004CBSMsg.RESULTCODE, (String)resposeMap.get(ApiClientConst.IF_HEADER_RESULTCODE));
			inCBSMsg.set(EKKA0050004CBSMsg.RESULTDETAILCODE, (String)resposeMap.get(ApiClientConst.IF_HEADER_RESULTDETAILCODE));
			ArrayList<CAANMsg> errList = new ArrayList<CAANMsg>();
			ArrayList<?> gyoumErrorList = (ArrayList<?>)resposeMap.get(ApiClientConst.IF_HEADER_GYOMUERRORLIST);
			if (gyoumErrorList != null)
			{
				for (Object obj : gyoumErrorList)
				{
					if (obj instanceof HashMap)
					{
						CAANMsg msg = new CAANMsg(EKKA0050004CBSMsg1List.class.getName());
						HashMap<?, ?> errMap = (HashMap<?, ?>)obj;
						msg.set(EKKA0050004CBSMsg1List.ERRORCODE, toStingObj(errMap.get(JKKcommonApiKKA0050004.ERR_CODE)));
						msg.set(EKKA0050004CBSMsg1List.ERRORMESSAGE, toStingObj(errMap.get(JKKcommonApiKKA0050004.ERR_MESSAGE)));
						errList.add(msg);
					}
				}
				if (errList.size() > 0)
				{
					inCBSMsg.set(EKKA0050004CBSMsg.EKKA0050004CBSMSG1LIST, errList.toArray(new CAANMsg[0]));
				}
			}
			HashMap<?,?> bodyMap = (HashMap<?,?>)resposeMap.get(ApiClientConst.IF_BODY);
			if (bodyMap != null)
			{
				Object tekiyoEdYmd = bodyMap.get(JKKcommonApiKKA0050004.OUT_PARAM_TEKIYO_ED_YMD);
				Object presentYmd = bodyMap.get(JKKcommonApiKKA0050004.OUT_PARAM_PRESENT_YMD);
				Object presentYmdHms = bodyMap.get(JKKcommonApiKKA0050004.OUT_PARAM_PRESENT_YMD_HMS);
				Object presentRiyu = bodyMap.get(JKKcommonApiKKA0050004.OUT_PARAM_PRESENT_RIYU);
				inCBSMsg.set(EKKA0050004CBSMsg.TEKIYO_ED_YMD, toStingObj(tekiyoEdYmd));
				inCBSMsg.set(EKKA0050004CBSMsg.PRESENT_YMD, toStingObj(presentYmd));
				inCBSMsg.set(EKKA0050004CBSMsg.PRESENT_YMD_HMS, toStingObj(presentYmdHms));
				inCBSMsg.set(EKKA0050004CBSMsg.PRESENT_RIYU, toStingObj(presentRiyu));
				// 正常終了の処理結果コード以外はエラーフラグ有に設定
				// #82591 MOD START
				//if(!("000".equals(resposeMap.get("resultCode")) || ("500".equals(resposeMap.get("resultCode")))))
				if(!("000".equals(resposeMap.get("resultCode"))))
				// #82591 MOD END
				{
					inCBSMsg.set(EKKA0050004CBSMsg.ERR_FLG, "1");
				} 
				else
				{
					inCBSMsg.set(EKKA0050004CBSMsg.ERR_FLG, "0");
				}
			}
		}
		catch (Exception e)
		{
			inCBSMsg.set(EKKA0050004CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
		}
	}
	
	/**
	 * 文字に変換する。
	 * <br>
	 * @param obj 対象のオブジェクト
	 * @return 文字列
	 */
	private static String toStingObj(Object obj)
	{
		if (obj == null)
		{
			return "";
		}
		return obj.toString();
	}
// IT1-2023-0000016 ADD END
	
// IT1-2023-0000016 DEL START
//	/**
//	 * プレミアムクラブポイント登録を行います。
//	 * 
//	 * @param inCBSMsg プレミアムクラブポイント登録メッセージ
//	 * @param inContext AgentDispatchContext
//	 */
//	@SuppressWarnings("unchecked")
//	public static void ctrlTrankInfo(CAANMsg inCBSMsg, AgentDispatchContext inContext)
//	{
//		Map<String, Object> serviceMap = new LinkedHashMap<String, Object>();
//
//		// オペレータ_ID
//		serviceMap.put(JZMCtrlTrankInfo.OPERATORID, JKKStringUtil.nullToBlank(inCBSMsg.getString(EKKA0050004CBSMsg.OPERATORID)));
//
//		// 運用日時
//		serviceMap.put(JZMCtrlTrankInfo.OPERATEDATETIME, JKKStringUtil.nullToBlank(inCBSMsg.getString(EKKA0050004CBSMsg.OPERATEDATETIME)));
//
//		// 外部インターフェイスID
//		serviceMap.put(JZMCtrlTrankInfo.OUT_IF_ID, KKIFE502);
//
//		// サービスＩＤ
//		serviceMap.put(JZMCtrlTrankInfo.SERVICEID, KKSV1021);
//
//		// サービスインターフェースＩＤ
//		serviceMap.put(JZMCtrlTrankInfo.SERVICEIFID, KKSV102101SC);
//
//		List<LinkedHashMap<String, Object>> list = new ArrayList<LinkedHashMap<String, Object>>();
//		LinkedHashMap<String, Object> serviceIf = new LinkedHashMap<String, Object>();
//		
//		// 機能コード
//		serviceIf.put("func_code", JKKStringUtil.nullToBlank(inCBSMsg.getString(EKKA0050004CBSMsg.FUNC_CODE)));
//		// SYSID
//		serviceIf.put("sysid", JKKStringUtil.nullToBlank(inCBSMsg.getString(EKKA0050004CBSMsg.SYSID)));
//		// 適用開始日
//		serviceIf.put("tekiyo_st_ymd", JKKStringUtil.nullToBlank(inCBSMsg.getString(EKKA0050004CBSMsg.TEKIYO_ST_YMD)));
//		// 進呈区分
//		serviceIf.put("present_kbn", JKKStringUtil.nullToBlank(inCBSMsg.getString(EKKA0050004CBSMsg.PRESENT_KBN)));
//		// 進呈eoポイント数
//		serviceIf.put("present_pt_su", JKKStringUtil.nullToBlank(inCBSMsg.getString(EKKA0050004CBSMsg.PRESENT_PT_SU)));
//		// SNS種別コード
//		serviceIf.put("sns_sbt_cd", JKKStringUtil.nullToBlank(inCBSMsg.getString(EKKA0050004CBSMsg.SNS_SBT_CD)));
//		// 施策申請枝番
//		serviceIf.put("sisk_sins_eda_no", JKKStringUtil.nullToBlank(inCBSMsg.getString(EKKA0050004CBSMsg.SISK_SINS_EDA_NO)));
//
//		list.add(serviceIf);
//		serviceMap.put(JZMCtrlTrankInfo.SERVICEIF, list);
//
//		// コマンド発行部品のスタブ用、
//		JZMCtrlTrankInfo instance = JZMCtrlTrankInfo.getInstance();
//
//		try
//		{
//			// TRANK連携
//			Map ret = instance.call_KKIFE502(serviceMap);
//			
//			int httpStatus = Integer.parseInt((String) ret.get("http_status"));
//			if ((httpStatus >= 200 && httpStatus < 300) && JKKStringUtil.isNullBlank((String) ret.get("errCode")))
//			{
//				inCBSMsg.set(EKKA0050004CBSMsg.ERR_FLG, "0");
//				// レスポンス電文を設定
//				editOutMsg(inCBSMsg, ret);
//			} 
//			else
//			{
//				inCBSMsg.set(EKKA0050004CBSMsg.ERR_FLG, "1");
//			}
//		}
//		catch (Exception e)
//		{
//			e.printStackTrace();
//		}
//	}
//	
//	/**
//	 * TRANKから返却されたJSONのレスポンス電文を設定します。
//	 * <br>
//	 * @param inCBSMsg プレミアムクラブポイント登録メッセージ
//	 * @param ret TRANKのレスポンス電文
//	 */
//	private static void editOutMsg(CAANMsg inCBSMsg, Map<String, Object> ret)
//	{
//		// 戻り値の設定
//		String tekiyoEdYmd = null;
//		String presentYmd = null;
//		String presentYmdHms = null;
//		String presentRiyu = null;
//		
//		String responseJson = ret.get("response").toString();
//		
//		if (!JKKStringUtil.isNullBlank(responseJson))
//		{
//			ObjectMapper mapper = new ObjectMapper();
//			try
//			{
//				JsonNode root = mapper.readTree(responseJson);
//				// 適用終了日
//				if (root.findValue("tekiyo_ed_ymd") != null)
//				{
//					tekiyoEdYmd = root.get("tekiyo_ed_ymd").textValue();
//				}
//				// 進呈日
//				if (root.findValue("present_ymd") != null)
//				{
//					presentYmd = root.get("present_ymd").textValue();
//				}
//				// 進呈日時
//				if (root.findValue("present_ymd_hms") != null)
//				{
//					presentYmdHms = root.get("present_ymd_hms").textValue();
//				}
//				// 進呈理由
//				if (root.findValue("present_riyu") != null)
//				{
//					presentRiyu = root.get("present_riyu").textValue();
//				}
//				
//				// 適用終了日
//				inCBSMsg.set(EKKA0050004CBSMsg.TEKIYO_ED_YMD, tekiyoEdYmd);
//				// 進呈日
//				inCBSMsg.set(EKKA0050004CBSMsg.PRESENT_YMD, presentYmd);
//				// 進呈日時
//				inCBSMsg.set(EKKA0050004CBSMsg.PRESENT_YMD_HMS, presentYmdHms);
//				// 進呈理由
//				inCBSMsg.set(EKKA0050004CBSMsg.PRESENT_RIYU, presentRiyu);
//			}
//			catch (Exception e)
//			{
//				e.printStackTrace();
//			}
//		}
//	}
//
//	/**
//	 * TRANKからのエラー情報をプレミアムクラブポイント登録メッセージにマッピングします。
//	 * <br>
//	 * @param inCBSMsg チケット利用申請依頼メッセージ
//	 * @param ret TRANKのレスポンス電文
//	 */
//	@SuppressWarnings("unchecked")
//	private static void errorMapping(CAANMsg inCBSMsg, Map<String, Object> ret)
//	{
//		// 識別コード配下を取得
//		List<Map<String, Object>> kksv102101sc = (List<Map<String, Object>>)ret.get(KKSV102101SC);
//		if (null != kksv102101sc && !kksv102101sc.isEmpty())
//		{
//			// サービスＩＦリスト取得
//			List<Map<String, Object>> serviceIfList = null;
//			serviceIfList = (List<Map<String, Object>>)kksv102101sc.get(0).get(JZMCtrlTrankInfo.SERVICEIF);
//
//			if (serviceIfList != null && !serviceIfList.isEmpty())
//			{
//
//				Map<String, Object> map = serviceIfList.get(0);
//				// 単項目チェックエラー発生項目設定
//
//				// E1:必須チェック
//				// E2:属性チェック
//				// E3:桁数チェック								
//				if (map.get(EKKA0050004CBSMsg.SYSID_ERR) != null)
//				{
//					inCBSMsg.set(EKKA0050004CBSMsg.SYSID_ERR, (String)map.get(EKKA0050004CBSMsg.SYSID_ERR));
//				}
//				if (map.get(EKKA0050004CBSMsg.TEKIYO_ST_YMD_ERR) != null)
//				{
//					inCBSMsg.set(EKKA0050004CBSMsg.TEKIYO_ST_YMD_ERR, (String)map.get(EKKA0050004CBSMsg.TEKIYO_ST_YMD_ERR));
//				}
//				if (map.get(EKKA0050004CBSMsg.PRESENT_KBN_ERR) != null)
//				{
//					inCBSMsg.set(EKKA0050004CBSMsg.PRESENT_KBN_ERR, (String)map.get(EKKA0050004CBSMsg.PRESENT_KBN_ERR));
//				}
//				if (map.get(EKKA0050004CBSMsg.PRESENT_PT_SU_ERR) != null)
//				{
//					inCBSMsg.set(EKKA0050004CBSMsg.PRESENT_PT_SU_ERR, (String)map.get(EKKA0050004CBSMsg.PRESENT_PT_SU_ERR));
//				}
//				if (map.get(EKKA0050004CBSMsg.SNS_SBT_CD_ERR) != null)
//				{
//					inCBSMsg.set(EKKA0050004CBSMsg.SNS_SBT_CD_ERR, (String)map
//							.get(EKKA0050004CBSMsg.SNS_SBT_CD_ERR));
//				}
//				if (map.get(EKKA0050004CBSMsg.SISK_SINS_EDA_NO_ERR) != null)
//				{
//					inCBSMsg.set(EKKA0050004CBSMsg.SISK_SINS_EDA_NO_ERR, (String)map
//							.get(EKKA0050004CBSMsg.SISK_SINS_EDA_NO_ERR));
//				}
//			}
//		}
//		
//	}
// IT1-2023-0000016 DEL END
}
