/*******************************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JEKKA0060001TPMA
 *	ソースファイル名：JEKKA0060001TPMA.java
 *	作成者			：
 *	日付			：2017年04月13日
 *＜機能概要＞
 *	mineo譲渡可否照会独自処理部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v29.00.00	2017/04/13	FJ）クウン	【ANK-3033-00-00】新規作成
 ********************************************************************************/
package eo.ejb.cbs.mainproc;

import java.util.ArrayList;
import java.util.Hashtable;
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 eo.ejb.cbs.cbsmsg.EKKA0060001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0060001CBSMsg1List;
import eo.ejb.common.JKKCtrlMvnoSvcKeiInfo;

public class JEKKA0060001TPMA implements TemplateMainHandler {

	/**
	 * コマンド実行結果
	 */
	private static final String CMD_RESULT_CD = "CMD_RESULT_CD";

	// コマンド実行部品用
	@SuppressWarnings("unchecked")
	public static void call_KKIFE353(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		Hashtable<String, Object > serviceMap = new Hashtable<String, Object>();

		List<Hashtable<String, Object>> list = new ArrayList<Hashtable<String, Object>>();

		Hashtable<String, Object> serviceIf = new Hashtable<String, Object>();

		//【header部（serviceMap）】
		// オペレータ_ID
		String operatorId = inCBSMsg.getString(EKKA0060001CBSMsg.OPERATORID);
		if(operatorId != null)
		{
			serviceMap.put(EKKA0060001CBSMsg.OPERATORID, operatorId);
		}
		else
		{
			serviceMap.put(EKKA0060001CBSMsg.OPERATORID, "");
		}

		// 運用日時
		String operatoDateTime = inCBSMsg.getString(EKKA0060001CBSMsg.OPERATEDATETIME);
		if(operatoDateTime != null)
		{
			serviceMap.put(EKKA0060001CBSMsg.OPERATEDATETIME, operatoDateTime);
		}
		else
		{
			serviceMap.put(EKKA0060001CBSMsg.OPERATEDATETIME, "");
		}

		//サービスID
		serviceMap.put(JKKCtrlMvnoSvcKeiInfo.SERVICEID, "KKSV0862");

		//サービスインターフェイスID（※識別子）
		serviceMap.put(JKKCtrlMvnoSvcKeiInfo.SERVICEIFID, "KKSV086201SC");

		//外部システムインターフェイスID
		serviceMap.put(JKKCtrlMvnoSvcKeiInfo.OUT_IF_ID_ELSE, "KKIFE353");

		//サービスインターフェイスID
		serviceMap.put(EKKA0060001CBSMsg.TEMPLATEID, "EKKA0060001");

		//【Body部（serviceIf）】
		//機能コード
		serviceIf.put(EKKA0060001CBSMsg.FUNC_CODE, "1");

		//ＫＥＹ＿サービス契約番号
		String svc_kei_no  =  inCBSMsg.getString(EKKA0060001CBSMsg.KEY_SVC_KEI_NO);

		if(svc_kei_no != null)
		{
			serviceIf.put("svc_kei_no", svc_kei_no);
		}
		else 
		{
			serviceIf.put("svc_kei_no", "");
		}

		//ＫＥＹ＿SYSID
		String sysid = inCBSMsg.getString(EKKA0060001CBSMsg.KEY_SYSID);
		if(sysid != null)
		{
			serviceIf.put("sysid", sysid);
		}
		else 
		{
			serviceIf.put("sysid", "");
		}

		list.add(serviceIf);

		serviceMap.put(JKKCtrlMvnoSvcKeiInfo.SERVICEIF,list);

		// コマンド発行部品のスタブ用、
		JKKCtrlMvnoSvcKeiInfo instance = JKKCtrlMvnoSvcKeiInfo.getInstance();

		try
		{
			// MVNO連携
			Map ret = instance.ctrlMvnoInfo_KKA0003(serviceMap);

			// コマンド実行結果判定
			if(null != ret.get(CMD_RESULT_CD))
			{
				// 結果コード"1":XML電文処理エラー発生, SOAP例外の場合
				if(ret.get(CMD_RESULT_CD).equals("1"))
				{
					inCBSMsg.set(EKKA0060001CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
					//空リストを設定
					inCBSMsg.set(EKKA0060001CBSMsg.EKKA0060001CBSMSG1LIST, new CAANMsg[0]);
				}

				else if(ret.get(CMD_RESULT_CD).equals("0"))
				{
					// リターンコードを判定しステータスをセットする。
					if (null != ret.get("returnCode"))
					{
						// "0000":正常
						if ("0000".equals((String)ret.get("returnCode")))
						{
							// ステータス設定（0:正常終了）
							inCBSMsg.set(EKKA0060001CBSMsg.STATUS, StatusCodes.NORMAL_END);
						}
						// "1000":単項目チェックエラー
						else if ("1000".equals((String)ret.get("returnCode")))
						{
							// ステータス設定（1000:単項目チェックエラー）
							inCBSMsg.set(EKKA0060001CBSMsg.STATUS, StatusCodes.SINGLEDATA_ERR);
						}
						// "1100":関連チェックエラー
						else if ("1100".equals((String)ret.get("returnCode")))
						{
							// ステータス設定（1100:関連チェックエラー）
							inCBSMsg.set(EKKA0060001CBSMsg.STATUS, StatusCodes.RELATION_ERR);
						}
						else
						{
							// ステータス設定（6000:外部IFでエラー発生１）
							inCBSMsg.set(EKKA0060001CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
						}
					}

					ArrayList<Hashtable<String, Object>> KKSV086201SC = (ArrayList<Hashtable<String, Object>>)ret.get("KKSV086201SC");
					ArrayList<Hashtable<String, Object>> retlist = null;

					if(KKSV086201SC != null && !KKSV086201SC.isEmpty())
					{
						retlist = (ArrayList<Hashtable<String, Object>>)KKSV086201SC.get(0).get(JKKCtrlMvnoSvcKeiInfo.SERVICEIF);
					}

					if(retlist != null && !retlist.isEmpty())
					{
						// 戻り電文の明細部分を設定して終了する。
						List<CAANMsg> msgList = new ArrayList<CAANMsg>();
						Hashtable<String, Object> data = (Hashtable<String, Object>)retlist.get(0);

						// 単項目チェックエラー発生項目設定
						// E1:必須チェック
						// E2:属性チェック
						// E3:桁数チェック
						if(data.get("svc_kei_no_err") != null)
						{	
							inCBSMsg.set(EKKA0060001CBSMsg.KEY_SVC_KEI_NO_ERR, (String)data.get("svc_kei_no_err"));
						}

						if(data.get("sysid_err") != null)
						{	
							inCBSMsg.set(EKKA0060001CBSMsg.KEY_SYSID_ERR, (String)data.get("sysid_err"));
						}
						
						CAANMsg msg = new CAANMsg(EKKA0060001CBSMsg1List.class.getName());
						// リターンコードが"0000"（正常）の場合、mineo譲渡可否判定フラグに"0"と設定する
						// それ以外の場合、"1"と設定する
						if ("0000".equals((String)ret.get("returnCode")))
						{
							msg.set(EKKA0060001CBSMsg1List.RESULT_JOTO_KAHI_FLG, "0");
						}
						else {
							msg.set(EKKA0060001CBSMsg1List.RESULT_JOTO_KAHI_FLG, "1");
						}
						msgList.add(msg);
						
						inCBSMsg.set(EKKA0060001CBSMsg.EKKA0060001CBSMSG1LIST, msgList.toArray(new CAANMsg[msgList.size()]));
					}
					else
					{
						inCBSMsg.set(EKKA0060001CBSMsg.EKKA0060001CBSMSG1LIST, new CAANMsg[0]);
					}
				}
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}
