/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JFUCmpMongonInfoAreaUtil
 *   ソースファイル名：JFUCmpMongonInfoAreaUtil.java
 *   作成者          ：富士通
 *   日付            ：2012年07月11日
 *＜機能概要＞
 *   フロント画面キャンペーン文言一覧領域出力情報を設定する部品です。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v4.00.00    2012/07/11   FJ）瀧澤    新規作成
 *   v5.00.00    2013/05/20   FJ）瀧澤    【ANK-1523-00-00】フロントSテレビキャンペーン対応
 *  v40.00.00    2019/01/04   FJ) 美濃原  【ANK-3509-00-00】TVコース変更時のVONU交換必須化対応（キャンペーン文言表示削除）
 *
 **********************************************************************/
package eo.web.webview.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JFUStrConst;

/**
 * フロント画面キャンペーン文言一覧領域出力情報を設定する部品です。
 *
 * <br>
 * @author 富士通
 */
public class JFUCmpMongonInfoAreaUtil
{

	/** Mapキー：キャンペーン文言リスト */
	private static final String MAP_KEY_CMP_MONGON_LIST = "cmp_mongon_list";
	/** Mapキー：キャンペーン文言 */
	private static final String MAP_KEY_CMP_MONGON = "cmp_mongon";
	/** Mapキー：キャンペーン文言種別コード */
	private static final String MAP_KEY_CMP_MONGON_SBT_CD = "cmp_mongon_sbt_cd";
	/** Mapキー：料金コースコード */
	private static final String MAP_KEY_PCRS_CD = "chge_af_pcrs_cd";
	/** Mapキー：料金プランコード */
	private static final String MAP_KEY_PPLAN_CD = "chge_af_pplan_cd";
	/** Mapキー：割引サービス適用条件種別コード */
	private static final String MAP_KEY_WRSV_APLY_JKN_SBT_CD = "wrsv_aply_jkn_sbt_cd";
	/** Mapキー：表示場所コード */
	private static final String MAP_KEY_DISP_PLACE_CD = "disp_place_cd";
	/** Mapキー：料金コースコード */
	private static final String MAP_KEY_TV_PCRS_CD = "pcrs_cd";
	/** Mapキー： 割引サービスコードリスト */
	private static final String OUT_PARAM_TV_BASE_WRIB_SVC_LIST = "tv_base_wrib_svc_list";

	/** DataBean操作種別：項目値設定 */
	private static final String SET = X31CWebConst.DATABEAN_SET_VALUE;
	/** 要素セパレータ N要素(末尾) */
	private static final String N_LAST = JFUWebCommon.SEP_N_LAST;

	/** 定義取得ID BSパススルー(TV用ONU交換工事) 割引サービスコード */
	private static final String QUERY_ID_BSPT_WRIB_SVC_CD = "bspt_wrib_svc_cd";

	/**
	 * キャンペーン文言一覧リストをサービスフォームBeanへ設定する処理です。
	 *
	 * <br>
	 * @param bl ビューロジックのインスタンス
	 * @param outputMap サービスの実行結果
	 * @param fixedText サービスID
	 */
	@SuppressWarnings("unchecked")
	public static void setCmpMongonInfoArea(X31BWebBusinessLogic bl, final HashMap outputMap, String fixedText)
	{
		if (!existsOutPutMap(outputMap, fixedText, MAP_KEY_CMP_MONGON_LIST))
		{
			// サービス検索結果マップの値が存在しない場合、処理終了
			return;
		}

		// キャンペーン文言一覧照会の下りマッピングの実行結果を取得する
		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = (HashMap<String, ArrayList<HashMap<String, String>>>)outputMap.get(fixedText);
		ArrayList<HashMap<String, String>> cmpMongonList = parentMap.get(MAP_KEY_CMP_MONGON_LIST);

		// サービスフォームBeanをLogicより取得する
		X31SDataBeanAccess serviceInfoBean = bl.getServiceFormBean();

		// DataBeanAccessに詰める処理を行う
		for (int i = 0; i < cmpMongonList.size(); i++)
		{
			Map<String, String> cmpMap = cmpMongonList.get(i);
			X31SDataBeanAccess cmpInfo = JFUWebCommon.createAndGetDataBeanTypeByPath(serviceInfoBean, JFUStrConst.CMP_MONGON_LIST + N_LAST, i);
			cmpInfo.sendMessageString(JFUStrConst.CMP_MONGON, SET, cmpMap.get(MAP_KEY_CMP_MONGON));
			cmpInfo.sendMessageString(JFUStrConst.CMP_MONGON_SBT_CD, SET, cmpMap.get(MAP_KEY_CMP_MONGON_SBT_CD));
			cmpInfo.sendMessageString(JFUStrConst.CMP_MONGON_PCRS_CD, SET, cmpMap.get(MAP_KEY_PCRS_CD));
			cmpInfo.sendMessageString(JFUStrConst.CMP_MONGON_PPLAN_CD, SET, cmpMap.get(MAP_KEY_PPLAN_CD));
			cmpInfo.sendMessageString(JFUStrConst.CMP_MONGON_WRSV_APLY_JKN_SBT, SET, cmpMap.get(MAP_KEY_WRSV_APLY_JKN_SBT_CD));
		}
	}

	/**
	 * キャンペーン文言一覧リストをサービスフォームBeanへ設定する処理です。
	 *
	 * <br>
	 * @param bl ビューロジックのインスタンス
	 * @param outputMap サービスの実行結果
	 * @param fixedText サービスID
	 */
	@SuppressWarnings("unchecked")
	public static void setTvCmpMongonInfoArea(X31BWebBusinessLogic bl, final HashMap outputMap, String fixedText)
	{
		if (!existsOutPutMap(outputMap, fixedText, MAP_KEY_CMP_MONGON_LIST))
		{
			// サービス検索結果マップの値が存在しない場合、処理終了
			return;
		}

		// キャンペーン文言一覧照会の下りマッピングの実行結果を取得する
		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = (HashMap<String, ArrayList<HashMap<String, String>>>)outputMap.get(fixedText);
		ArrayList<HashMap<String, String>> cmpMongonList = parentMap.get(MAP_KEY_CMP_MONGON_LIST);

		// サービスフォームBeanをLogicより取得する
		X31SDataBeanAccess serviceInfoBean = bl.getServiceFormBean();

		// DataBeanAccessに詰める処理を行う
		for (int i = 0; i < cmpMongonList.size(); i++)
		{
			Map<String, String> cmpMap = cmpMongonList.get(i);
			X31SDataBeanAccess cmpInfo = JFUWebCommon.createAndGetDataBeanTypeByPath(serviceInfoBean, JFUStrConst.CMP_MONGON_LIST + N_LAST, i);
			cmpInfo.sendMessageString(JFUStrConst.CMP_MONGON, SET, cmpMap.get(MAP_KEY_CMP_MONGON));
			cmpInfo.sendMessageString(JFUStrConst.CMP_MONGON_SBT_CD, SET, cmpMap.get(MAP_KEY_CMP_MONGON_SBT_CD));
			cmpInfo.sendMessageString(JFUStrConst.CMP_MONGON_PCRS_CD, SET, cmpMap.get(MAP_KEY_TV_PCRS_CD));
			cmpInfo.sendMessageString(JFUStrConst.CMP_MONGON_DISP_PLACE_CD, SET, cmpMap.get(MAP_KEY_DISP_PLACE_CD));
		}
	}

	/**
	 * サービスの実行結果が格納されているかを確認する処理です。
	 *
	 * <br>
	 * @param outputMap サービスの実行結果格納マップ
	 * @param keySC サービスの実行結果を格納しているキー
	 * @param keyCBSMsg サービスの実行結果の明細を格納しているキー
	 * @return boolean サービスの実行結果があればtrue,なければfalse
	 */
	@SuppressWarnings("unchecked")
	private static boolean existsOutPutMap(HashMap outputMap, String keySC, String keyCBSMsg)
	{
		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = null;
		if (outputMap.containsKey(keySC))
		{
			parentMap = (HashMap<String, ArrayList<HashMap<String, String>>>)outputMap.get(keySC);
		}
		if (parentMap == null || !parentMap.containsKey(keyCBSMsg))
		{
			// パラメータ異常ならば終了
			return false;
		}
		ArrayList<HashMap<String, String>> childList = parentMap.get(keyCBSMsg);
		if (childList == null || childList.size() == 0)
		{
			// パラメータ異常ならば終了
			return false;
		}
		return true;
	}

	/**
	 * BSパススルー工事費割引CP（割引サービスコード）を取得する処理です。
	 * 
	 * <br>
	 * @return BSパススルー工事費割引CP（割引サービスコード）
	 * @throws Exception
	 */
	public static String getBsptWribSvcCd() throws Exception
	{
		String bsptWribSvcCd = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW01501, QUERY_ID_BSPT_WRIB_SVC_CD);
		return bsptWribSvcCd;
	}

	/**
	 * BSパススルー工事費割引CPが適用済か考慮して割引サービスコードを取得する処理です。
	 *
	 * <br>
	 * @param bl ビューロジックのインスタンス
	 * @param outputMap サービスの実行結果
	 * @param fixedText サービスID
	 * @return 割引サービスコード
	 */
	@SuppressWarnings("unchecked")
	public static Map<String, String> getTvBsptWribSvc(X31BWebBusinessLogic bl, final HashMap outputMap, String fixedText)
	{
		if (!existsOutPutMap(outputMap, fixedText, OUT_PARAM_TV_BASE_WRIB_SVC_LIST))
		{
			// サービス検索結果マップの値が存在しない場合、処理終了
			return new HashMap<String, String>();
		}

		// キャンペーン文言一覧照会の下りマッピングの実行結果を取得する
		HashMap<String, ArrayList<HashMap<String, String>>> parentMap = (HashMap<String, ArrayList<HashMap<String, String>>>)outputMap.get(fixedText);
		ArrayList<HashMap<String, String>> cmpMongonList = parentMap.get(OUT_PARAM_TV_BASE_WRIB_SVC_LIST);

		for (int i = 0; i < cmpMongonList.size(); i++)
		{
			// 割引サービスコードリスト(1件のみ)
			Map<String, String> cmpMap = cmpMongonList.get(i);
			return cmpMap;
		}
		return new HashMap<String, String>();
	}

}