/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUGetOnuInfoCC
*   ソースファイル名：JFUGetOnuInfoCC.java
*   作成者          ：富士通
*   日付            ：2017年08月28日
*＜機能概要＞
*  ONU情報取得コモンコンポーネント部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v33.00.00   2017/08/28   FJ）中田    【ANK-3209-00-00】E-PON電話単独への1Gコース追加抑止 ※新規作成
*   v61.00      2023/04/04   FJ) 張本    【ANK-4315-00-00】【eo定期】eoホームゲートウェイ導入対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;

import eo.common.constant.JFUStrConst;
import eo.ejb.cbs.cbsmsg.EKK0341B502CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B502CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0411A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0411A010CBSMsg1List;

/**
 * ONU情報取得部品です。
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JFUGetOnuInfoCC extends JFUBaseCC
{
	/* ■□ EKK0341B502_現機器提供サービス契約一覧照会SC ■□ */
	/** テンプレートID(現機器提供サービス契約一覧照会) */
	private static final String TEMP_ID_EKK0341B502 = "EKK0341B502";
	/** テンプレートID(現機器提供サービス契約一覧照会明細) */
	private static final String TEMP_ID_DTL_EKK0341B502 = EKK0341B502CBSMsg.EKK0341B502CBSMSG1LIST;
	/** IN項目リスト(現機器提供サービス契約一覧照会) */
	private static final List<String> IN_LIST_EKK0341B502 = Arrays.asList(EKK0341B502CBSMsg.KEY_SVC_KEI_NO,EKK0341B502CBSMsg.KEY_SVC_KEI_NO_KAISEN_UCWK);
	/** 関連チェックエラー項目(現機器提供サービス契約一覧照会) */
	private static final String ERR_EKK0341B502 = EKK0341B502CBSMsg.KEY_SVC_KEI_NO_ERR;
	/** SC実行結果取得キー(現機器提供サービス契約一覧照会) */
	private static final String TEMP_TEMP_KEY_EKK0341B502 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0341B502 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EZM0411A010_宅内機器型式一意照会SC ■□ */
	/** テンプレートID(宅内機器型式一意照会) */
	private static final String TEMP_ID_EZM0411A010 = "EZM0411A010";
	/** テンプレートID(宅内機器型式一意照会明細) */
	private static final String TEMP_ID_DTL_EZM0411A010 = EZM0411A010CBSMsg.EZM0411A010CBSMSG1LIST;
	/** IN項目リスト(宅内機器型式一意照会) */
	private static final List<String> IN_LIST_EZM0411A010 = Arrays.asList(EZM0411A010CBSMsg.KEY_TAKNKIKI_MODEL_CD);
	/** 関連チェックエラー項目(宅内機器型式一意照会) */
	private static final String ERR_EZM0411A010 = EZM0411A010CBSMsg.KEY_TAKNKIKI_MODEL_CD_ERR;
	/** SC実行結果取得キー(宅内機器型式一意照会) */
	private static final String TEMP_TEMP_KEY_EZM0411A010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EZM0411A010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ IN項目 ■□ */
	/** IN：FUNC_CODE */
	private static final String FUNC_CODE = "func_code";
	/** IN：SVC_KEI_NO */
	private static final String SVC_KEI_NO = "svc_kei_no";

	/**
	 * ONU情報取得処理
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception
	 */
	public IRequestParameterReadWrite getOnuInfo(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// リクエストパラメータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		if (inMap == null || inMap.size() == 0)
		{
			// 情報が存在しない場合
			return param;
		}

		// 機能コード
		String funcCode = (String)inMap.get(FUNC_CODE);
		
		// サービス契約番号
		String svcKeiNo = (String)inMap.get(SVC_KEI_NO);

		// ●EKK0341B502_現機器提供サービス契約一覧照会
		// ユーザデータ初期化
		initData(param, fixedText, IN_LIST_EKK0341B502);
		// 上りマッピング
		setEKK0341B502(param, fixedText, funcCode, svcKeiNo);
		//検索エラーなし設定
		ignoreSearchError(param, fixedText);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMP_ID_EKK0341B502, TEMP_ID_DTL_EKK0341B502, IN_LIST_EKK0341B502, ERR_EKK0341B502);

		// 取得件数分ループ処理を行う
		for (HashMap<String, String> dataMap : getTemplateList(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0341B502),TEMP_ID_DTL_EKK0341B502))
		{
			// 宅内機器種別コードが"D0"(ONU)または"S0"(HGW)の場合
			if (JFUStrConst.TKNI_KIKI_SBT_CD_D0.equals(dataMap.get(EKK0341B502CBSMsg1List.TAKNKIKI_SBT_CD)) || JFUStrConst.CD01262_S0.equals(dataMap.get(EKK0341B502CBSMsg1List.TAKNKIKI_SBT_CD)))
			{
				// 機器提供サービス契約ステータスが"100"(サービス提供中)の場合
				if (JFUStrConst.CD00056_100.equals(dataMap.get(EKK0341B502CBSMsg1List.KKTK_SVC_KEI_STAT)) || JFUStrConst.CD00056_030.equals(dataMap.get(EKK0341B502CBSMsg1List.KKTK_SVC_KEI_STAT)))
				{
					// ●EZM0411A010_宅内機器型式一意照会
					// ユーザデータ初期化
					initData(param, fixedText, IN_LIST_EZM0411A010);
					// 上りマッピング
					setEZM0411A010(param, fixedText, funcCode, dataMap.get(EKK0341B502CBSMsg1List.TAKNKIKI_MODEL_CD));
					//検索エラーなし設定
					ignoreSearchError(param, fixedText);
					// サービスIF実行
					executeSC(handle, param, fixedText, TEMP_ID_EZM0411A010, TEMP_ID_DTL_EZM0411A010, IN_LIST_EZM0411A010, ERR_EZM0411A010);
					// 結果取得
					List<HashMap> EZM0411A010List = getTemplateList(inMap, getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EZM0411A010), TEMP_ID_DTL_EZM0411A010);
					HashMap EZM0411A010Map = (HashMap)EZM0411A010List.get(0);
					String ponSbtCd = (String)EZM0411A010Map.get(EZM0411A010CBSMsg1List.PON_SBT_CD);
					
					// 結果返却
					inMap.put(EZM0411A010CBSMsg1List.PON_SBT_CD, ponSbtCd);
					
					break;
				}
			}
		}
		return param;
	}

	/**
	 * チェック処理（共通処理）です。
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}

	/**
	 * 現機器提供サービス契約一覧照会の上りマッピング処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @param svcKeiNo
	 * @throws RequestParameterException
	 */
	private void setEKK0341B502(IRequestParameterReadWrite param, String fixedText, String funcCode, String svcKeiNo) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定
		setFuncCode(param, fixedText, funcCode);
		
		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0341B502CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		// ＫＥＹ＿サービス契約番号＜回線内訳＞
		inMap.put(EKK0341B502CBSMsg.KEY_SVC_KEI_NO_KAISEN_UCWK, svcKeiNo);
	}

	/**
	 * 宅内機器型式一意照会の上りマッピング処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText 固定文字列
	 * @throws RequestParameterException
	 */
	private void setEZM0411A010(IRequestParameterReadWrite param, String fixedText, String funcCode, String taknkikiModelCd) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定
		setFuncCode(param, fixedText, funcCode);
		
		// 宅内機器型式コード
		inMap.put(EZM0411A010CBSMsg.KEY_TAKNKIKI_MODEL_CD, taknkikiModelCd);
	}

}
