/*******************************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JEKKA1900001TPMA
 *	ソースファイル名：JEKKA1900001TPMA.java
 *	作成者			：FJ
 *	日付			：2022年07月12日
 *＜機能概要＞
 *	契約サービス照会（MVNO）共通処理部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v60.00.00	2022/07/12	FJ)南		【ANK-4266-00-00】eoID照会・eoIDパスワード変更フォームの改善対応
 *	v60.00.01	2022/08/17	FJ)南		【ST-2022-0000013 】CKIFE066のレスポンス内容変更対応
 ********************************************************************************/
package eo.ejb.cbs.mainproc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
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.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EKKA1900001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA1900001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA1900001CBSMsg3List;
import gyomu.JKKcommonApiKKA1900001;


public class JEKKA1900001TPMA implements TemplateMainHandler
{
	/**
	 * 契約サービス照会(MVNO)の実行
	 * <br>
	 * @param inCBSMsg
	 * @param inContext
	 */
	public static void executeKKIFE495(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		HashMap<String, Object > serviceMap = new HashMap<String, Object>();
		
		// キー種別
		serviceMap.put(JKKcommonApiKKA1900001.IN_PARAM_KEY_SBT, JKKStringUtil.nullToBlank(inCBSMsg.getString(EKKA1900001CBSMsg.KEYSBT)));
		// キー値
		serviceMap.put(JKKcommonApiKKA1900001.IN_PARAM_KEY_VAL, JKKStringUtil.nullToBlank(inCBSMsg.getString(EKKA1900001CBSMsg.KEYVAL)));
		// サービス種別
		serviceMap.put(JKKcommonApiKKA1900001.IN_PARAM_SVC_SBT, JKKStringUtil.nullToBlank(inCBSMsg.getString(EKKA1900001CBSMsg.SVCSBT)));
		// 契約状態
		serviceMap.put(JKKcommonApiKKA1900001.IN_PARAM_KEIYAKU_STS, JKKStringUtil.nullToBlank(inCBSMsg.getString(EKKA1900001CBSMsg.KEIYAKUSTS)));
		
		// コマンド発行部品のインスタンスを取得
		JKKcommonApiKKA1900001 instance = new JKKcommonApiKKA1900001();
		try
		{
			// 共通API連携
			Map<String, Object> responseMap = instance.callApiKKA1900001(serviceMap);
			
			if(responseMap == null)
			{
				responseMap = new HashMap<String, Object>();
			}
			
			// ST-2022-0000013 DEL START
//			// レスポンス内容、ボディ部を取得
//			List<CAANMsg> msg1List = new ArrayList<CAANMsg>();
//			Map<String, Object> body = (Map<String, Object>)responseMap.get("body");
//			List<Map<String, Object>> keiyakuList = (ArrayList<Map<String, Object>>)body.get("keiyakuList");
//			if(keiyakuList == null)
//			{
//				keiyakuList = new ArrayList<Map<String, Object>>();
//			}
//			for (int i = 0; i < keiyakuList.size(); i++)
//			{
//				
//				CAANMsg msg1 = new CAANMsg(EKKA1900001CBSMsg1List.class.getName());
//				Map<String, Object> map = (Map<String, Object>)keiyakuList.get(i);
//				if(map == null)
//				{
//					map = new HashMap<String, Object>();
//				}
//				msg1.set(EKKA1900001CBSMsg1List.TELNUM, JKKStringUtil.nullToBlank((String)map.get(EKKA1900001CBSMsg1List.TELNUM)));
//				msg1List.add(msg1);
//			}
//			
//			inCBSMsg.set(EKKA1900001CBSMsg.EKKA1900001CBSMSG1LIST, msg1List.toArray(new CAANMsg[msg1List.size()]));
			// 業務エラーリストを取得
//			ArrayList<CAANMsg> errList = new ArrayList<CAANMsg>();
//			ArrayList<?> gyoumErrorList = (ArrayList<?>)responseMap.get(ApiClientConst.IF_HEADER_GYOMUERRORLIST);
//			if (gyoumErrorList != null)
//			{
//				for (Object obj : gyoumErrorList)
//				{
//					if (obj instanceof HashMap)
//					{
//						CAANMsg msg = new CAANMsg(EKKA1900001CBSMsg3List.class.getName());
//						HashMap<?, ?> errMap = (HashMap<?, ?>)obj;
//						msg.set(EKKA1900001CBSMsg3List.ERRORCODE, JKKStringUtil.nullToBlank((String)errMap.get(JKKcommonApiKKA1900001.ERR_CODE)));
//						msg.set(EKKA1900001CBSMsg3List.ERRORMESSAGE, JKKStringUtil.nullToBlank((String)errMap.get(JKKcommonApiKKA1900001.ERR_MESSAGE)));
//						errList.add(msg);
//					}
//				}
//				if (errList.size() > 0)
//				{
//					inCBSMsg.set(EKKA1900001CBSMsg.EKKA1900001CBSMSG3LIST, errList.toArray(new CAANMsg[0]));
//				}
//			}
			// ST-2022-0000013  DEL END
			// ST-2022-0000013  ADD START
			String resultCode = (String)responseMap.get(ApiClientConst.IF_HEADER_RESULTCODE);
			Map<String, Object> body = (Map<String, Object>)responseMap.get(ApiClientConst.IF_BODY);
			if (resultCode != null)
			{
				// 正常ではない場合
				if(!"000".equals(resultCode))
				{
					// 業務エラーの場合
					if("500".equals(resultCode))
					{
						ArrayList<?> gyoumErrorList = (ArrayList<?>)responseMap.get(ApiClientConst.IF_HEADER_GYOMUERRORLIST);
						if (!checkWkErrCd(gyoumErrorList))
						{
							errOut(inCBSMsg);
						}
						else
						{
							editOutMsg(body, inCBSMsg);
						}
					}
					// 業務エラー以外のエラーの場合
					else
					{
						errOut(inCBSMsg);
					}
				}
				// 正常の場合
				else
				{
					editOutMsg(body, inCBSMsg);
				}
			}
			else
			{
				errOut(inCBSMsg);
			}
			// ST-2022-0000013 ADD END
		}
		catch (Exception e)
		{
			inCBSMsg.set(EKKA1900001CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
		}
	}
	
	// ST-2022-0000013 ADD START
	/**
	 * 業務エラーコードチェック
	 * @param gyoumErrorList
	 * @return チェックの判定
	 */
	private static boolean checkWkErrCd(ArrayList<?> gyoumErrorList)
	{
		for (Object obj : gyoumErrorList)
		{
			if (obj instanceof HashMap)
			{
				CAANMsg msg = new CAANMsg(EKKA1900001CBSMsg3List.class.getName());
				HashMap<?, ?> errMap = (HashMap<?, ?>)obj;
				String errCode = (String)errMap.get(JKKcommonApiKKA1900001.ERR_CODE);
				if ("1001".equals(errCode) || "1002".equals(errCode) || "1003".equals(errCode) || "9000".equals(errCode))
				{
					return false;
				}
			}
		}
		return true;
	}
	/**
	 * レスポンス電文を作成
	 * @param body
	 * @param inCBSMsg
	 */
	private static void editOutMsg(Map<String, Object> body, CAANMsg inCBSMsg)
	{
		List<CAANMsg> msg1List = new ArrayList<CAANMsg>();
		List<Map<String, Object>> keiyakuList = (ArrayList<Map<String, Object>>)body.get("keiyakuList");
		if(keiyakuList == null)
		{
			keiyakuList = new ArrayList<Map<String, Object>>();
		}
		for (int i = 0; i < keiyakuList.size(); i++)
		{
			
			CAANMsg msg1 = new CAANMsg(EKKA1900001CBSMsg1List.class.getName());
			Map<String, Object> map = (Map<String, Object>)keiyakuList.get(i);
			if(map == null)
			{
				map = new HashMap<String, Object>();
			}
			msg1.set(EKKA1900001CBSMsg1List.TELNUM, JKKStringUtil.nullToBlank((String)map.get(EKKA1900001CBSMsg1List.TELNUM)));
			msg1List.add(msg1);
		}
		inCBSMsg.set(EKKA1900001CBSMsg.EKKA1900001CBSMSG1LIST, msg1List.toArray(new CAANMsg[msg1List.size()]));
	}
	
	/**
	 * システムエラーを出力
	 * @param inCBSMsg
	 */
	private static void errOut(CAANMsg inCBSMsg)
	{
		inCBSMsg.set(EKKA1900001CBSMsg.SEARCH_ERR_FLG_ERR, "E1");
		inCBSMsg.set(EKKA1900001CBSMsg.STATUS,StatusCodes.ITEM_RELATION_ERR);
	}
	// ST-2022-0000013 ADD END
}
