/*******************************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JEKKA0030002TPMA
 *	ソースファイル名：JEKKA0030002TPMA.java
 *	作成者			：
 *	日付			：2016年10月28日
 *＜機能概要＞
 *	ｍｉｎｅｏ連絡先メールアドレス取得独自処理部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v28.00.00	2016/10/28	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.EKKA0030002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0030002CBSMsg1List;
import eo.ejb.common.JKKCtrlMvnoSvcKeiInfo;



public class JEKKA0030002TPMA implements TemplateMainHandler {

	/**
	 * コマンド実行結果
	 */
	private static final String CMD_RESULT_CD = "CMD_RESULT_CD";

	/**
	 * コマンド実行結果（エラー）
	 */
	private static final String CMD_ERROR_MESSAGE = "CMD_ERROR_MESSAGE";


	// コマンド実行部品用
	@SuppressWarnings("unchecked")
	public static void call_KKIFE347(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(EKKA0030002CBSMsg.OPERATORID);
		if(operatorId != null)
		{
			serviceMap.put(EKKA0030002CBSMsg.OPERATORID, operatorId);
		}
		else
		{
			serviceMap.put(EKKA0030002CBSMsg.OPERATORID, "");
		}

		// 運用日時
		String operatoDateTime = inCBSMsg.getString(EKKA0030002CBSMsg.OPERATEDATETIME);
		if(operatoDateTime != null)
		{
			serviceMap.put(EKKA0030002CBSMsg.OPERATEDATETIME, operatoDateTime);
		}
		else
		{
			serviceMap.put(EKKA0030002CBSMsg.OPERATEDATETIME, "");
		}

		//サービスID
		serviceMap.put(JKKCtrlMvnoSvcKeiInfo.SERVICEID, "KKSV0849");

		//サービスインターフェイスID（※識別子）
		serviceMap.put(JKKCtrlMvnoSvcKeiInfo.SERVICEIFID, "KKSV084901SC");

		//外部システムインターフェイスID
		serviceMap.put(JKKCtrlMvnoSvcKeiInfo.OUT_IF_ID_ELSE, "KKIFE347");

		//サービスインターフェイスID
		serviceMap.put(EKKA0030002CBSMsg.TEMPLATEID, "EKKA0030002");


		//【Body部（serviceIf）】
		//機能コード
		serviceIf.put(EKKA0030002CBSMsg.FUNC_CODE, "1");

		//ＫＥＹ＿サービス契約番号
		String svc_kei_no  =  inCBSMsg.getString(EKKA0030002CBSMsg.KEY_SVC_KEI_NO);

		if(svc_kei_no != null)
		{
			serviceIf.put("svc_kei_no", svc_kei_no);
		}
		else 
		{
			serviceIf.put("svc_kei_no", "");
		}

		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(EKKA0030002CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
					//空リストを設定
					inCBSMsg.set(EKKA0030002CBSMsg.EKKA0030002CBSMSG1LIST, 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(EKKA0030002CBSMsg.STATUS, StatusCodes.NORMAL_END);
						}
						// "1000":単項目チェックエラー
						else if ("1000".equals((String)ret.get("returnCode")))
						{
							// ステータス設定（1000:単項目チェックエラー）
							inCBSMsg.set(EKKA0030002CBSMsg.STATUS, StatusCodes.SINGLEDATA_ERR);
						}
						// "1100":関連チェックエラー
						else if ("1100".equals((String)ret.get("returnCode")))
						{
							// ステータス設定（1100:関連チェックエラー）
							inCBSMsg.set(EKKA0030002CBSMsg.STATUS, StatusCodes.RELATION_ERR);
						}
						else
						{
							// ステータス設定（6000:外部IFでエラー発生１）
							inCBSMsg.set(EKKA0030002CBSMsg.STATUS, StatusCodes.EXTERNAL_IF_ERR1);
						}
					}

					CAANMsg[] ekka0030002cbsmsg1list = null;

					ArrayList<Hashtable<String, Object>> KKSV084901SC = (ArrayList<Hashtable<String, Object>>)ret.get("KKSV084901SC");
					ArrayList<Hashtable<String, Object>> retlist = null;

					if(KKSV084901SC != null && !KKSV084901SC.isEmpty())
					{
						retlist = (ArrayList<Hashtable<String, Object>>)KKSV084901SC.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(EKKA0030002CBSMsg.KEY_SVC_KEI_NO_ERR, (String)data.get("svc_kei_no_err"));
						}


						CAANMsg msg = new CAANMsg(EKKA0030002CBSMsg1List.class.getName());

						if(data.get(EKKA0030002CBSMsg1List.MINEOMAILADDRESS) != null
								||data.get(EKKA0030002CBSMsg1List.SVCSTATUS) != null)
						{
							//mineoメールアドレス
							msg.set(EKKA0030002CBSMsg1List.MINEOMAILADDRESS, (String)data.get(EKKA0030002CBSMsg1List.MINEOMAILADDRESS));
						
							//サービスステータス
							msg.set(EKKA0030002CBSMsg1List.SVCSTATUS, (String)data.get(EKKA0030002CBSMsg1List.SVCSTATUS));
						
							msgList.add(msg);
						}
						inCBSMsg.set(EKKA0030002CBSMsg.EKKA0030002CBSMSG1LIST, msgList.toArray(new CAANMsg[msgList.size()]));
					}
					else
					{
						inCBSMsg.set(EKKA0030002CBSMsg.EKKA0030002CBSMSG1LIST, new CAANMsg[0]);
					}
				}
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}
