/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0247_FUSV0247OPDBMapper
*	ソースファイル名：FUSV0247_FUSV0247OPDBMapper.java
*	作成者			：富士通
*	日付			：2012年07月18日
*＜機能概要＞
*	その他キャンペーン情報照会CCへのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/07/18	FJ)山下		新規作成)
*   V4.00.01	2012/10/02	FJ)齋藤		｢ANK-0390-00-00｣Web代行入力その他キャンペーン連携対応
*   V5.00.00	2013/07/24	FJ)岡井		【内部障害】その他キャンペーンコード(表示用キャンペーンコード)対応
*   V5.01.00	2013/08/15	FJ)岡井		【ANK-1631-00-00】マンションのその他ＣＰコードの対応
*   v37.00		2018/03/27	FJ)張本		【ANK-3398-00-00】7月CP切替対応
*
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

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.JFUStrConst;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをします。
 * <p>
 * <BR>
 * @author 富士通
 */

public class FUSV0247_FUSV0247OPDBMapper
{

	/** FUSV024701CC */
	private static final String FUSV024701CC = "FUSV024701CC";

	/** プロパティからの取得キー(その他キャンペーンau非表示用コード) */
	private static final String KEY_OTHER_CMP_STKKDT_TV_HTMZ = "OTHER_CMP_STKKDT_TV_HTMZ";

	/**
	 * コンストラクタです。
	 */
	public FUSV0247_FUSV0247OPDBMapper()
	{
	}

	/**
	 * その他キャンペーン情報照会CCの上りマッピング処理です。
	 * @param bean データBean[0]:サービスフォームBean [1]共有フォームBean
	 * @param outputMap アウトマップ
	 * @return HashMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV024701CC(X31SDataBeanAccess[] bean, HashMap outputMap) throws Exception
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != 2)
		{
			return null;
		}

		HashMap<String, Object> ccMap = new HashMap<String, Object>();

		// 新築戸建限定キャンペーンをプロパティより取得
		String stkkdtCmpCd = JFUWebCommon.getDispText(JFUStrConst.EMPTY, KEY_OTHER_CMP_STKKDT_TV_HTMZ);

		// 共有フォームBean.契約サービス情報
		X31SDataBeanAccess webNewInfoBean = JFUWebCommon.getDataBeanTypeByPath(bean[1], JFUWebCommon.WEB_NEW_INFO);
		X31SDataBeanAccess keiyakuSvcInfo = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO).getDataBean(0);
		// 共有フォームBean.ｅｏ光ネット
		X31SDataBeanAccess eoNetBean = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.EONET).getDataBean(0);
		// 共有フォームBean.ｅｏ光テレビ
		X31SDataBeanAccess eoTvBean = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.EOTV).getDataBean(0);
		// 共有フォームBean.ｅｏモバイル
		X31SDataBeanAccess eoMobileBean = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.EOMOBILE).getDataBean(0);
		// 共有フォームBean.マンション情報
		X31SDataBeanAccess mansBean = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.MANSION_INFO).getDataBean(0);

		// 選択サービス（ネット）
		ccMap.put("select_svc_net", keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10, X31CWebConst.DATABEAN_GET_VALUE));
		// 選択サービス（電話）
		ccMap.put("select_svc_tel", keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_TEL_10, X31CWebConst.DATABEAN_GET_VALUE));
		// 選択サービス（ネット）
		ccMap.put("select_svc_tv", keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_TV_10, X31CWebConst.DATABEAN_GET_VALUE));
		// 選択サービス（モバイル）
		ccMap.put("select_svc_mobile", keiyakuSvcInfo.sendMessageString(CommonInfoCFConst.SELECT_SVC_MOBILE_10, X31CWebConst.DATABEAN_GET_VALUE));
		// 申込回線サービス
		ccMap.put("mskm_ksn_svc", webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_KSN_SVC_06, X31CWebConst.DATABEAN_GET_VALUE));
		// 申込マンションタイプ
		ccMap.put("mskm_mns_type", webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_MNS_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE));

		// 【ANK-1631-00-00】マンションのその他ＣＰコードの対応
		// 提供方式コード
		ccMap.put("teikyo_hoshiki_cd", mansBean.sendMessageString(CommonInfoCFConst.TEIKYO_HOSHIKI_CD_16, X31CWebConst.DATABEAN_GET_VALUE));
		// PAIRID
		ccMap.put("pairid", mansBean.sendMessageString(CommonInfoCFConst.PAIRID_16, X31CWebConst.DATABEAN_GET_VALUE));
		// モデムプラン
		ccMap.put("modem_plan", eoNetBean.sendMessageString(CommonInfoCFConst.MODEM_PLAN_11, X31CWebConst.DATABEAN_GET_VALUE));

		// ネットコース
		ccMap.put("net_course", eoNetBean.sendMessageString(CommonInfoCFConst.NET_COURSE_11, X31CWebConst.DATABEAN_GET_VALUE));
		// 電話コース
		ccMap.put("tel_course", webNewInfoBean.sendMessageString(CommonInfoCFConst.TEL_COURSE_06, X31CWebConst.DATABEAN_GET_VALUE));
		// テレビコース
		ccMap.put("tv_course", eoTvBean.sendMessageString(CommonInfoCFConst.EO_TV_COURSE_13, X31CWebConst.DATABEAN_GET_VALUE));
		// モバイルコース
		ccMap.put("mobile_course", eoMobileBean.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_GET_VALUE));

		// 1台目のテレビチューナー・種類
		ccMap.put("stb_hd1", eoTvBean.sendMessageString(CommonInfoCFConst.STB_HD1_13, X31CWebConst.DATABEAN_GET_VALUE));

		// String配列汎用コードの要素数を取得
		Integer hanyoCdLength = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.HANYO_CD_LIST).getCount();

		X31SDataBeanAccessArray hanyoCdList = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.HANYO_CD_LIST);
		X31SDataBeanAccess hanyoInfoBean = null;
		ArrayList elseInfoList = new ArrayList();

		// 汎用コード、汎用コード区分をマッピング
		for (int i = 0; i < hanyoCdLength; i++)
		{
			HashMap elseInfoMap = new HashMap();
			hanyoInfoBean = hanyoCdList.getDataBean(i);

			// 汎用コード
			elseInfoMap.put("hanyo_cd", hanyoInfoBean.sendMessageString(CommonInfoCFConst.HANYO_CD_46, X31CWebConst.DATABEAN_GET_VALUE));
			// 汎用表示用コード
			elseInfoMap.put("hanyo_dsp_cd", hanyoInfoBean.sendMessageString(CommonInfoCFConst.HANYO_DSP_CD_46, X31CWebConst.DATABEAN_GET_VALUE));
			// 汎用コード区分
			elseInfoMap.put("hanyo_cd_kbn", hanyoInfoBean.sendMessageString(CommonInfoCFConst.HANYO_SBT_CD_46, X31CWebConst.DATABEAN_GET_VALUE));

			elseInfoList.add(elseInfoMap);

			// 新築戸建限定CPでマンションの場合はＴＶキャンペーン対象外とする。
			if (stkkdtCmpCd.equals(hanyoInfoBean.sendMessageString(CommonInfoCFConst.HANYO_DSP_CD_46, X31CWebConst.DATABEAN_GET_VALUE))
					&& JFUStrConst.MSKM_MNS_TYPE_MANSION.equals(webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_MNS_TYPE_06,
							X31CWebConst.DATABEAN_GET_VALUE)))
			{
				// 選択サービス（テレビ）
				ccMap.put("select_svc_tv", JFUStrConst.EMPTY);
			}
		}

		ccMap.put("else_info", elseInfoList);
		ccMap.put("max_search_num", JFUStrConst.MAX_SEARCH_NUM);

		outputMap.put(FUSV024701CC, ccMap);

		return outputMap;
	}

	/**
	 * FUSV0024701CC下りマッピング
	 * @param bean サービスフォームBean
	 * @param outputMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	public void getFUSV024701CC(X31SDataBeanAccess bean, HashMap<String, Object> outputMap) throws Exception
	{

		if (bean == null)
		{
			return;
		}

		if (outputMap == null)
		{
			return;
		}

		if (!outputMap.containsKey(FUSV024701CC))
		{
			return;
		}

		// WEB新規情報
		X31SDataBeanAccess bnWebinfo = getWebInfo(bean);

		// 汎用コードリスト取得
		X31SDataBeanAccessArray hanyoCdList = bnWebinfo.getDataBeanArray(CommonInfoCFConst.HANYO_CD_LIST);
		
		// 初期化
		hanyoCdList.clearArray();

		// CCの戻り値を取得
		HashMap ccMap = (HashMap)outputMap.get(FUSV024701CC);

		ArrayList otherCmpList = (ArrayList)ccMap.get("other_cmp_list");

		Iterator ite = otherCmpList.iterator();
		while (ite.hasNext())
		{
			HashMap otherCmpMap = (HashMap)ite.next();

			X31SDataBeanAccess hanyoCdListBean = hanyoCdList.addDataBean();

			// 汎用コード
			hanyoCdListBean.sendMessageString(CommonInfoCFConst.HANYO_CD_46, X31CWebConst.DATABEAN_SET_VALUE, (String)otherCmpMap.get("cd"));

			// 汎用表示用コード
			hanyoCdListBean.sendMessageString(CommonInfoCFConst.HANYO_DSP_CD_46, X31CWebConst.DATABEAN_SET_VALUE, (String)otherCmpMap.get("dsp_cd"));

			// 汎用名称
			hanyoCdListBean.sendMessageString(CommonInfoCFConst.HANYO_NM_46, X31CWebConst.DATABEAN_SET_VALUE, (String)otherCmpMap.get("nm"));

			// 受付開始日
			hanyoCdListBean.sendMessageString(CommonInfoCFConst.HANYO_STA_DTM_46, X31CWebConst.DATABEAN_SET_VALUE, (String)otherCmpMap.get("sta_dtm"));
			
			// 受付終了日
			hanyoCdListBean.sendMessageString(CommonInfoCFConst.HANYO_END_DTM_46, X31CWebConst.DATABEAN_SET_VALUE, (String)otherCmpMap.get("end_dtm"));

			// 汎用種別コード
			hanyoCdListBean.sendMessageString(CommonInfoCFConst.HANYO_SBT_CD_46, X31CWebConst.DATABEAN_SET_VALUE, (String)otherCmpMap.get("hanyo_cd_kbn"));
			
			// 適用可否フラグ
			hanyoCdListBean.sendMessageString(CommonInfoCFConst.HANYO_KH_FLG_46, X31CWebConst.DATABEAN_SET_VALUE, (String)otherCmpMap.get("tekiyo_kh"));
		}
	}

	/**
	 * WEB新規情報
	 * 
	 * @param bean
	 * @return bn
	 */
	private X31SDataBeanAccess getWebInfo(X31SDataBeanAccess bean)
	{

		X31SDataBeanAccessArray arr = bean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		if (arr.getCount() == 0)
		{
			arr.addDataBean();
		}
		X31SDataBeanAccess bn = arr.getDataBean(0);

		return bn;
	}

}