/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0119_KKSV0119OPDBMapper
*	ソースファイル名：KKSV0119_KKSV0119OPDBMapper.java
*	作成者			：FJ
*	日付			：2011年06月06日
*＜機能概要＞
*	BP（eo光ネット登録）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/06/06	FJ			新規作成
*   v3.00.00	2012/05/08	FJ）川島	【ANK-0046-00-00】IPv6対応
*   v4.00.00    2012/09/14  FJ) 渡邉    【ANK-0546-00-00】宅内ＰＦ
*   v4.00.00    2012/10/25  FJ）村松    【ANK-1254-00-00】マンション親・子の一時金対応、及びマンション親・基本料金への対応
*   v4.01.00    2012/11/21  FJ) 谷口    【IT1-2012-0002046】宅内ＰＦ（受付担当者欄追加）
*   v5.00.00    2013/03/06  FJ) 三浦    【ANK-1421-00-00】IP_STB
*   v5.01.00    2013/04/30  FJ) 中山    【IKK-2013-0001027】一時支払料金のイーサーネット対応
*   v7.00.00    2013/11/06  FJ) 高橋    【ANK-1578-00-00】多機能ルーター（機器追加）  
*   v8.00.00    2014/02/04  FJ）松田    【ANK-1589-00-00】消費増税に伴う料金施策
*   v45.00.00   2019/07/30  FJ) 三原    【IT1-2019-0000063】事務手数料の更新不正
*   v52.00.00	2021/02/03	FJ) 西窪	【ANK-3987-00-00】Netflix導入対応（STEP2）
*   v52.00.01	2021/02/04	FJ) 西窪	【IT1-2021-0000010】ストリーミングメディアプレーヤー料金プランコード変更対応
**********************************************************************/
package eo.web.webview.mapping;

import static eo.web.webview.common.JKKKeiNewCmnLogicUtil.*;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JKKStrConst;
import eo.web.webview.KKW00121SF.KKW00121SFConst;
import eo.web.webview.KKW00121SF.KKW00121SFLogic;
import eo.web.webview.common.JKKGetDataUtil;
import eo.web.webview.common.JKKWebCommon;

/**
 * DataBean-BPマッピングをする。
 * @author 富士通
 */
public class KKSV0119_KKSV0119OPDBMapper
{
	/**
	 * コンストラクタ
	 */
	public KKSV0119_KKSV0119OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：申込新規登録画面
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param opeDate
	 * 
	 * @return HashMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV011901CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, String opeDate)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 1)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		/*-----------------------------------------------
		 * 一時金設定登録
		 *-----------------------------------------------*/

		// 一時金設定コード
		X31SDataBeanAccessArray dataBeanArray = bean[0].getDataBeanArray(KKW00121SFConst.SVC_MSKM_INFO);
		X31SDataBeanAccess subDataBean = dataBeanArray.getDataBean(KKW00121SFLogic.KKW00124_TAB_INDEX);
		String inputValue = null;
		int index = 0;
		try
		{
			String selectedIndex = subDataBean.sendMessageString(KKW00121SFConst.JIMU_COMMISION_22, X31CWebConst.DATABEAN_GET_VALUE);
			index = Integer.parseInt(selectedIndex);
			X31SDataBeanAccess comboBean = bean[0].getDataBeanArray(KKW00121SFConst.JIMU_COMMISION).getDataBean(0);
			inputValue = comboBean.sendMessageString(KKW00121SFConst.JIMU_COMMISION_CD_LIST_25, X31CWebConst.DATABEAN_GET_VALUE, index);
		}
		catch (NumberFormatException e)
		{
			inputValue = "00";
		}

		String prcMskmKind = bean[0].sendMessageString(KKW00121SFConst.MSKM_KIND, X31CWebConst.DATABEAN_GET_VALUE);

		// ANK-1254 ADD START 村松
		// 一時支払料金番号
		if(JKKStrConst.MSKM_KIND_MANSION.equals(prcMskmKind))
		{	// 申込種類がマンションなら契約事務手数料(マンション)
			if (MANSION_KAISEN_HSK_CD_ETHER.equals(bean[0].sendMessageString(
					KKW00121SFConst.MANSION_KAISEN_HOSHIKI, X31CWebConst.DATABEAN_GET_VALUE)))
			{
				// イーサーネット用
				// IT1-2019-0000063 MOD START
				//parentMap.put("tmp_pay_prc_no", JKKStrConst.TPP_KEI_MANS_ETHER_JMTE_8PER);
				parentMap.put("tmp_pay_prc_no", JKKStrConst.TPP_KEI_MANS_ETHER_JMTE_10PER);
				// IT1-2019-0000063 MOD END
			}
			else
			{
				// IT1-2019-0000063 MOD START
				//parentMap.put("tmp_pay_prc_no", JKKStrConst.TPP_KEIANSION_MANS_JMTE_8PER);
				parentMap.put("tmp_pay_prc_no", JKKStrConst.TPP_KEIANSION_MANS_JMTE_10PER);
				// IT1-2019-0000063 MOD END
			}
		}
		else
		{	// 申込種類がマンション以外なら契約事務手数料
			// IT1-2019-0000063 MOD START
			//parentMap.put("tmp_pay_prc_no", JKKStrConst.TPP_KEI_JMTE_8PER); 
			parentMap.put("tmp_pay_prc_no", JKKStrConst.TPP_KEI_JMTE_10PER);
			// IT1-2019-0000063 MOD END
		}
		// ANK-1254 ADD END   村松
		
		parentMap.put("icjkn_sette_cd", inputValue);

		// 一時金指定額
		String jimuCommisionShitei = subDataBean.sendMessageString(KKW00121SFConst.JIMU_COMMISION_SHITEI_22, X31CWebConst.DATABEAN_GET_VALUE);
		parentMap.put("icjkn_shitei_amnt", jimuCommisionShitei);

		// サービス契約番号
		String svcKeiNo = subDataBean.sendMessageString(KKW00121SFConst.SVC_KEI_NO_22, X31CWebConst.DATABEAN_GET_VALUE);
		parentMap.put("svc_kei_no", svcKeiNo);

		outputMap.put("KKSV011901CC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean [0]：申込新規登録画面
	 * @param outputMap
	 * @param func_code
	 * @param opeDate
	 * @param mansionMap
	 * @param netMap eo光ネット照会マップ
	 * @return HashMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV011902CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, String opeDate
			, HashMap mansionMap, HashMap<String, Object> netMap)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 1)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		/*-----------------------------------------------
		 * サービス契約<eo光ネット>登録
		 *-----------------------------------------------*/
		// 業務連絡備考
		parentMap.put("kk0091_work_rrk_biko", bean[0].sendMessageString(KKW00121SFConst.NET_KIJIRAN, X31CWebConst.DATABEAN_GET_VALUE));

		
		/*-----------------------------------------------
		 * ファミリーパック非対応ルーター件数取得一覧照会
		 *-----------------------------------------------*/
		boolean opFamilyPack = bean[0].sendMessageBoolean(KKW00121SFConst.OP_FAMILY_PACK, X31CWebConst.DATABEAN_GET_VALUE);
		if(opFamilyPack)
		{	// ファミリーパックが選択されている場合
			X31SDataBeanAccessArray dataBeanArray = bean[0].getDataBeanArray(KKW00121SFConst.SVC_MSKM_INFO);
			X31SDataBeanAccess subDataBean = dataBeanArray.getDataBean(KKW00121SFLogic.KKW00124_TAB_INDEX);
			String svcKeiNo = subDataBean.sendMessageString(KKW00121SFConst.SVC_KEI_NO_22, X31CWebConst.DATABEAN_GET_VALUE);
			
			// ＫＥＹ＿サービス契約番号
			parentMap.put("kk0341_key_svc_kei_no", svcKeiNo);

			// ＫＥＹ＿基準日
			parentMap.put("kk0341_key_ymd", opeDate);

			// ＫＥＹ＿料金コースコード
			String mskmKind = bean[0].sendMessageString(KKW00121SFConst.MSKM_KIND, X31CWebConst.DATABEAN_GET_VALUE);
			HashMap prcKnrnMap = getNetSvcKeiPrcKnrnCd(bean[0], mskmKind, mansionMap);
			String pcourse = (String)prcKnrnMap.get(NET_PRC_KNRN_KEY_PCRSCD);
			
			parentMap.put("kk0341_key_pcrs_cd", pcourse);
		}
		/*-----------------------------------------------
		 * 割賦プランコード／宅内機器型式コード一覧照会
		 *-----------------------------------------------*/
		// ＫＥＹ＿基準日
		parentMap.put("kk2521_key_ymd",
				bean[0].sendMessageString(KKW00121SFConst.TABLET_FIRST_RSV_APLY_YMD, X31CWebConst.DATABEAN_GET_VALUE));

		// ＫＥＹ＿宅内機器型式コード
		parentMap.put("kk2521_key_taknkiki_model_cd", 
				JKKWebCommon.getPullDownCode(bean[0], KKW00121SFConst.TABLET_TNMT_NM_LIST,
						KKW00121SFConst.TABLET_SELECT_CD_17, KKW00121SFConst.TABLET_KIKI_MODEL_CD_LIST_17));

		// ＫＥＹ＿割賦販売形態コード
		String tabletPaywayCd = JKKWebCommon.getPullDownCode(bean[0], KKW00121SFConst.TABLET_PAYWAY_LIST,
				KKW00121SFConst.SELECT_CD_58, KKW00121SFConst.CD_LIST_58);
		parentMap.put("kk2521_key_kap_hambai_form_cd", getNetKapHambaiFormCd(tabletPaywayCd));
		
		/*-----------------------------------------------
		 * 料金コース_機器提供サービス一意照会
		 *-----------------------------------------------*/
		if(!JKKGetDataUtil.isNull(bean[0].sendMessageString(KKW00121SFConst.IP_STB_RENTAL_USE_CNT, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			// ＫＥＹ＿料金コースコード
			String mskmKind = bean[0].sendMessageString(KKW00121SFConst.MSKM_KIND, X31CWebConst.DATABEAN_GET_VALUE);
			HashMap prcKnrnMap = getNetSvcKeiPrcKnrnCd(bean[0], mskmKind, mansionMap);
			
			// ＫＥＹ＿料金コースコード
			parentMap.put("kk0801_key_pcrs_cd", (String)prcKnrnMap.get(NET_PRC_KNRN_KEY_PCRSCD));
			// ＫＥＹ＿機器提供サービスコード
			parentMap.put("kk0801_key_kktk_svc_cd", JKKStrConst.KKTK_SVC_CD_IP_STB);
			// ＫＥＹ＿予約適用年月日
			parentMap.put("kk0801_key_rsv_aply_ymd", opeDate);

		}
		
		/*-----------------------------------------------
		 * 料金プラン一意照会
		 *-----------------------------------------------*/
		if(bean[0].sendMessageBoolean(KKW00121SFConst.IP_STB_RENTAL, X31CWebConst.DATABEAN_GET_VALUE))
		{
			// ＫＥＹ＿料金コースコード
			// IT1-2021-0000010 MOD START
			// parentMap.put("kk0591_key_pcrs_cd", JKKStrConst.CD00134_IP_STB);
			parentMap.put("kk0591_key_pcrs_cd", JKKStrConst.CD00134_SMP);
			// ＫＥＹ＿料金コースコード
			// parentMap.put("kk0591_key_pplan_cd", JKKStrConst.CD00565_IP_STB);
			parentMap.put("kk0591_key_pplan_cd", JKKStrConst.CD00565_SMP);
			// IT1-2021-0000010 MOD END
		}
		
		
		//タブレット端末購入にチェックされている場合
		if(bean[0].sendMessageBoolean(KKW00121SFConst.TABLET_BUY, X31CWebConst.DATABEAN_GET_VALUE))
		{
			/*-----------------------------------------------
			 * 代理店一覧照会（ユーザＩＤ）
			 *-----------------------------------------------*/
			// タブレット＿受付担当取扱コード → 特記取扱コード情報取得マップ.ＫＥＹ＿代理店コード
			parentMap.put("kk0061_key_agnt_cd", bean[0].sendMessageString("タブレット＿受付担当取扱コード", X31CWebConst.DATABEAN_GET_VALUE));

			// オンライン運用日付 → 特記取扱コード情報取得マップ.ＫＥＹ＿予約適用年月日
			parentMap.put("kk0061_key_rsv_aply_ymd", opeDate);

			/*-----------------------------------------------
			 * 割賦契約登録
			 *-----------------------------------------------*/
			// タブレット＿端末購入受付担当者名 → 割賦契約登録マップ.端末購入受付担当者名
			parentMap.put("kk2541_tnmt_buy_uk_tntsha_nm", bean[0].sendMessageString("タブレット＿端末購入受付担当者名", X31CWebConst.DATABEAN_GET_VALUE));
		}
		
		// ANK-3987-00-00 ADD START
		//スティック型ＳＴＢレンタルにチェックされている場合
		if(bean[0].sendMessageBoolean(KKW00121SFConst.IP_STB_RENTAL, X31CWebConst.DATABEAN_GET_VALUE))
		{
			// ストリーミングメディアプレーヤー＿端末購入受付担当者名 → 端末購入通知書情報登録マップ.ストリーミングメディアプレーヤー＿端末購入受付担当者名
			parentMap.put("kk3271_tnmt_buy_uk_tntsha_nm", bean[0].sendMessageString("ストリーミングメディアプレーヤー＿端末購入受付担当者名", X31CWebConst.DATABEAN_GET_VALUE));
		}
		// ANK-3987-00-00 ADD END
		

		outputMap.put("KKSV011902CC", parentMap);

		return outputMap;
	}
	
	/**
	 * ファミリーパック非対応ルータ件数取得
	 * @param bean サービスフォームBean
	 * @param outputMap データ格納マップ
	 * @return ファミリーパック非対応ルータ件数
	 */
	@SuppressWarnings("unchecked")
	public int getNotFamilyPackRouterCount(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap)
	{
		int count = 0;
		HashMap<String, Object> parentMap = (HashMap<String, Object>)outputMap.get("KKSV011902CC");
		ArrayList<HashMap<String, Object>> kk0341Msg1List = (ArrayList<HashMap<String, Object>>)parentMap.get(KK0341_LIST);
		if(null != kk0341Msg1List && 0 < kk0341Msg1List.size())
		{
			HashMap<String, Object> mp = kk0341Msg1List.get(0);
			
			count = Integer.parseInt(String.valueOf(mp.get("kk0341_search_num")));
		}
		
		return count;
	}
}