/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0310_FUSV0310OPDBMapper
*	ソースファイル名：FUSV0310_FUSV0310OPDBMapper.java
*	作成者			：FJ
*	日付			：2017年07月28日
*＜機能概要＞
*	BP（GH申込(確認)）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v33.00.00   2017/07/28  FJ）美濃原  【ANK-3217-00-00】GHサービス開始対応
*   v33.01      2017/08/28  FJ) 張本    【ANK-3236-00-00】チケットによる割引CPの重複適用防止のための画面制御
*   v35.0.0     2017/11/13  FJ)美濃原   【ANK-3336-01-00】GH端末申込画面のチケット利用メニュー表示制御対応
*   v51.00      2020/10/19  FJ)美濃原   【ANK-3918-00-00】「インターネットサギウォール」「おうちの機器補償」に対してプレクラ対応を行う
*   v66.00      2023/01/31  FJ)美濃原   【ANK-4307-00-00】【eo定期】プレミアムクラブリニューアル対応
*
**********************************************************************/
package eo.web.webview.mapping;

import static eo.common.constant.JPCModelConstant.FUNC_CD_2;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW10701SF.FUW10701SFConst;
import eo.web.webview.common.JFUEoPremiumClubConst;
import eo.web.webview.common.JFUEoPremiumClubDsp;

/**
 * DataBean-BPマッピングをします。
 *
 * <br>
 * @author 富士通
 */
public class FUSV0310_FUSV0310OPDBMapper
{

	/** 機能コード */
	private static final String FUNC_CODE = "func_code";

	/** 住所情報分割コモンコンポーネント部品 */
	private static final String FUSV031001CC = "FUSV031001CC";
	/** eoプレミアムクラブ一覧照会CC */
	private static final String FUSV031002CC = "FUSV031002CC";
	/** eoプレミアムクラブ一覧照会CC 共通チェック*/
	private static final String CHK_TITLE_FUSV031002 = "JFUEoPremiumClubShokaiCC";

	/** 配列番号[0]:SFBean */
	private static final int INFO_IDX_SF_BEAN = 0;
	/** 配列番号[2]:サービス契約情報 */
	private static final int INFO_IDX_SVC_KEI = 2;

	/** 住所分割IN項目:送付先住所 */
	private static final String AD_SEND_ADDRESS = "send_address";
	/** 住所分割IN項目:都道府県・市区町村 */
	private static final String AD_SPLIT_STATE_CITY = "state_city";
	/** 住所分割IN項目:字 */
	private static final String AD_SPLIT_AZA = "aza";
	/** 住所分割IN項目:丁目・番地等 */
	private static final String AD_SPLIT_CHOME_BNCHI = "chome_bnchi";


	/** 実行フラグ */
	private static final String FLG_ON = "1";

	/**
	 * コンストラクタ
	 */
	public FUSV0310_FUSV0310OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをします。
	 * <br>
	 * @param bean　[0]：eoスマートリンク申込
	 * @param outputMap マップ
	 * @return 送信情報
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV031001CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// 送付先住所取得
		parentMap.put(AD_SEND_ADDRESS, bean[INFO_IDX_SF_BEAN].sendMessageString(FUW10701SFConst.SEND_ADDRESS, X31CWebConst.DATABEAN_GET_VALUE));

		// 都道府県・市区町村
		parentMap.put(AD_SPLIT_STATE_CITY, bean[INFO_IDX_SF_BEAN].sendMessageString(FUW10701SFConst.INPUT_ADDRESS_PREF,
				X31CWebConst.DATABEAN_GET_VALUE));
		// 字
		parentMap.put(AD_SPLIT_AZA, bean[INFO_IDX_SF_BEAN].sendMessageString(FUW10701SFConst.INPUT_ADDRESS_AZA, X31CWebConst.DATABEAN_GET_VALUE));
		// 丁目・番地等
		parentMap.put(AD_SPLIT_CHOME_BNCHI, bean[INFO_IDX_SF_BEAN].sendMessageString(FUW10701SFConst.INPUT_ADDRESS_CHO,
				X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(FUSV031001CC, parentMap);

		return outputMap;
	}

	/**
	 * eoプレミアム施策一覧照会CCのの上りマッピングをする
	 * @param bean　[0]：eoスマートリンク申込
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return outputMap
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV031002CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) throws Exception
	{
		// 確認でない場合は実行しない
		if (!FUNC_CD_2.equals(func_code))
		{
			return null;
		}

		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		ArrayList jknList = new ArrayList();
		ArrayList kikiList = new ArrayList();
		HashMap jknMap = new HashMap();
		HashMap kikiMap = new HashMap();

		// SYSID → SSOログイン情報.SYSID
		parentMap.put(JFUEoPremiumClubConst.KEY_SYSID, bean[1].sendMessageString(CommonInfoCFConst.SYSID_21, X31CWebConst.DATABEAN_GET_VALUE));

		// 宅内機器リスト.宅内機器種別コード → P0:タブレット
		kikiMap.put(JFUEoPremiumClubConst.KEY_TAKNKIKI_SBT_CD, JFUStrConst.CD01262_P0);
		// 宅内機器リスト追加
		kikiList.add(kikiMap);

		// ｅｏプレミアムクラブ申請条件リスト.ｅｏプレミアムクラブ施策申請条件種別コード → 02:配送
		jknMap.put(JFUEoPremiumClubConst.KEY_EOPRMCL_SSKSSJK_SBT_CD, JFUStrConst.CD01691_02);
		// 宅内機器リスト設定
		jknMap.put(JFUEoPremiumClubConst.KEY_TAKNKIKI_LIST, kikiList);
		// ｅｏプレミアムクラブ申請条件リスト追加
		jknList.add(jknMap);

		HashMap jknMap2 = new HashMap();
		// ｅｏプレミアムクラブ申請条件リスト.ｅｏプレミアムクラブ施策申請条件種別コード → 00:登録
		jknMap2.put(JFUEoPremiumClubConst.KEY_EOPRMCL_SSKSSJK_SBT_CD, JFUStrConst.CD01691_00);
		// ｅｏプレミアムクラブ申請条件リスト追加
		jknList.add(jknMap2);

		// ｅｏプレミアムクラブ申請条件リスト設定
		parentMap.put(JFUEoPremiumClubConst.KEY_EOPRMCL_SNS_JKN_LST, jknList);

		// ＫＥＹ＿サービス契約番号
		parentMap.put(JFUEoPremiumClubConst.KEY_SVC_KEI_NO, bean[INFO_IDX_SVC_KEI].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, X31CWebConst.DATABEAN_GET_VALUE));
		// ＫＥＹ＿割引サービス一覧取得実行フラグ 
		parentMap.put(JFUEoPremiumClubConst.KEY_WRIB_SHOKAI_FLG, FLG_ON);
		// ＫＥＹ＿オプションサービス契約取得実行フラグ
		parentMap.put(JFUEoPremiumClubConst.KEY_OPSVC_SHOKAI_FLG, FLG_ON);

		// ＫＥＹ＿画面ID
		parentMap.put(JFUEoPremiumClubConst.KEY_SCREEN_ID, "FUW10722");

		// 連携パラメータ
		outputMap.put(FUSV031002CC, parentMap);

		// 共通CCチェック用にマップを設定
		outputMap.put(CHK_TITLE_FUSV031002, parentMap);

		return outputMap;
	}

	/**
	 * eoプレミアム施策一覧照会CCの下りマッピングをする
	 * @param bean　[0]：eoスマートリンク申込
	 * @param outputMap アウトマップ
	 * @param func_code　機能コード
	 * @param taisyoSisakList 表示対象の施策コード（フロントで更新時に使用するコード）
	 * @param grpSisakList チケット申請中チェック用の施策コード（同一キャンペーン）
	 * @param pairSisakMap 複合チケットのマップ（プロパティから取得した内容）
	 * @param opeDate オンライン運用日付
	 * @return サービスBean配列
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	public void getPremiumClubList(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, List<String> taisyoSisakList,
			Map<String, List<String>> grpSisakList, Map<String, String> pairSisakMap, String opeDate) throws Exception
	{

		// 確認でない場合は実行しない
		if (!FUNC_CD_2.equals(func_code))
		{
			return;
		}

		HashMap sif_result_map = null;
		if (outputMap.containsKey(FUSV031002CC))
		{
			sif_result_map = (HashMap)outputMap.get(FUSV031002CC);
		}

		// ●ＰＣプラン申し込み確認を取得
		Boolean MskmPcPlanValue = bean[0].sendMessageBoolean(FUW10701SFConst.MSKM_PC_PLAN, "GET_VALUE");
		// ●ＰＣワイドプラン申し込み確認を取得
		Boolean MskmpcWidPlanValue = bean[0].sendMessageBoolean(FUW10701SFConst.MSKM_PC_WID_PLAN, "GET_VALUE");

		// ■画面施策リスト表示パラメータ
		HashMap<String, Object> dsp_sisak_settei = new HashMap<String, Object>();

		// サービス契約番号
		dsp_sisak_settei.put(JFUEoPremiumClubDsp.PARAM_SVC_KEI_NO, bean[INFO_IDX_SVC_KEI].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, X31CWebConst.DATABEAN_GET_VALUE));
		//  プロパティキー（定義体のフォームID）
		dsp_sisak_settei.put(JFUEoPremiumClubDsp.PARAM_PROP_KEY, "FUW10721");

		// TODO: プレミアムクラブのリニューアルにより、復活時は見直しが必要
		//  対象施策リスト
		dsp_sisak_settei.put(JFUEoPremiumClubDsp.PARAM_TAISYO_SISAK_LIST, taisyoSisakList);
		//  グループ施策リスト
		dsp_sisak_settei.put(JFUEoPremiumClubDsp.PARAM_GRP_SISAK_LIST, grpSisakList);

		//  オプションサービス判定用（おうちの機器補償）
		Map<String, List<String>> opsvc_cd_map = new HashMap<String, List<String>>();
		List<String> opSvcTaisyoList = Arrays.asList(JFUStrConst.CD00136_B133, JFUStrConst.CD00136_B134);
		List<String> opSvcMskmList = new ArrayList<String>();
		if (MskmPcPlanValue || MskmpcWidPlanValue)
		{
			opSvcMskmList.add(JFUStrConst.CD00136_B133);
		}
		opsvc_cd_map.put(JFUEoPremiumClubDsp.PARAM_OPSVC_TAISYO_LIST, opSvcTaisyoList);
		opsvc_cd_map.put(JFUEoPremiumClubDsp.PARAM_OPSVC_MSKM_LIST, opSvcMskmList);
		dsp_sisak_settei.put(JFUEoPremiumClubDsp.PARAM_OPSVCCD_MAP, opsvc_cd_map);

		// 施策除外リスト
		dsp_sisak_settei.put(JFUEoPremiumClubDsp.PARAM_SISAK_JGI_LIST, null);

		JFUEoPremiumClubDsp.getPremiumClubList(bean, dsp_sisak_settei, sif_result_map, opeDate);

	}

}