/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0080_FUSV0080OPDBMapper
*	ソースファイル名：FUSV0080_FUSV0080OPDBMapper.java
*	作成者			：FJ
*	日付			：2011年08月11日
*＜機能概要＞
*	BP（ファミリーパック申込(申込)）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/11	FJ		新規作成
*   v3.00       2012/05/16  FJ）山本    【ANK-0116-00-00】 ネット・オプションサービスの事務手数料、および機器返送費用の変更対応
*	v4.00		2012/10/11	FJ）岡井    【ANK-1223-00-00】 進捗補足事項編集対応
*	v4.00		2013/01/08	FJ）岡井    【ST4-2012-0000246】 性能障害対応
*	v5.00		2013/01/23	FJ）井口    【ANK-1420-00-00】 セキュリティ＆サポートパック（ウィルスバスターマルチデバイス版導入対応）
*   v5.00       2013/10/25  FJ）中谷    【OM-2013-0003633】メール送信先の不具合対応
*   v7.00       2013/11/27  FJ）岡井    【ANK-1578-00-00】多機能ルーター(機器追加)
*
**********************************************************************/
package eo.web.webview.mapping;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

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.FUW03801SF.FUW03801SFConst;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをします。
 *
 * <br>
 * @author 富士通
 */
public class FUSV0080_FUSV0080OPDBMapper
{
	/** 機能コード */
	private static final String FUNC_CODE = "func_code";

	/** ファミリーパックルーター自動登録CC */
	private static final String CC_TITLE_FUSV008001 = "FUSV008001CC";
	/** 割引サービス契約自動登録CC */
	private static final String CC_TITLE_FUSV008002 = "FUSV008002CC";

	/** 申込内容承認登録 */
	private static final String SC_TITLE_FUSV008001 = "FUSV008001SC";
	/** 申込明細照査・後続業務依頼 */
	private static final String SC_TITLE_FUSV008002 = "FUSV008002SC";

	/** メール送信情報登録.送信先一覧明細 */
	private static final String ECC0021D010CBSMSG1LIST = "ECC0021D010CBSMsg1List";
	/** メール送信情報登録.送信先一覧明細2 */
	private static final String ECC0021D010CBSMSG2LIST = "ECC0021D010CBSMsg2List";
	/** メール送信情報登録.送信先一覧明細3 */
	private static final String ECC0021D010CBSMSG3LIST = "ECC0021D010CBSMsg3List";
	/** メール送信情報登録.送信先一覧明細4 */
	private static final String ECC0021D010CBSMSG4LIST = "ECC0021D010CBSMsg4List";
	/** メール送信情報登録.送信先一覧明細5 */
	private static final String ECC0021D010CBSMSG5LIST = "ECC0021D010CBSMsg5List";
	/** 申込内容承認登録.申込内容承認登録明細 */
	private static final String EKK0011D020_LIST = "EKK0011D020CBSMsg1List";

	/** SYSID */
	private static final String SYSID = "sysid";
	/** 多機能ルーター交換希望有無 */
	private static final String TAKINORT_KKN_KIBO_UM = "takinort_kkn_kibo_um";
	/** メールアドレス */
	private static final String MLAD = "mlad";

	/** KEY_サービス契約番号 */
	private static final String KEY_SVC_KEI_NO = "key_svc_kei_no";
	/** 割引サービスコード */
	private static final String WRIB_SVC_CD = "wrib_svc_cd";
	/** 割引サービス対象サービスコード */
	private static final String WRIB_SVC_TRGT_SVC_CD = "wrib_svc_trgt_svc_cd";
	/** 割引タイプコード */
	private static final String KEY_WRIB_TYPE_CD = "key_wrib_type_cd";
	/** 申込番号 */
	private static final String MSKM_NO = "mskm_no";
	/** 申込明細番号 */
	private static final String MSKM_DTL_NO = "mskm_dtl_no";
	/** 申込書番号 */
	private static final String MSKMSHO_NO = "mskmsho_no";
	/** 予約適用年月日 */
	private static final String RSV_APLY_YMD = "rsv_aply_ymd";
	/** 異動区分 */
	private static final String IDO_DIV = "ido_div";
	/** 要求種別コード */
	private static final String YOKYU_SBT_CD = "yokyu_sbt_cd";
	/** 本文非定型置換文字 */
	private static final String TEXT_HTK_CKAM_MOJI = "text_htk_ckam_moji";
	/** メール明細コード */
	private static final String MAIL_DTL_CD = "mail_dtl_cd";
	/** 料金コースコード */
	private static final String PCRS_CD = "pcrs_cd";
	/** 料金プランコード */
	private static final String PPLAN_CD = "pplan_cd";
	/** 進捗特記事項1 */
	private static final String PRG_TKJK_1 = "prg_tkjk_1";
	/** メールコード */
	private static final String MAIL_CD = "mail_cd";
	/** 多機能ルーター交換有無 */
	private static final String TKN_ROUTER_CHG_UM = "tkn_router_chg_um";

	/** 特記事項１要素を取得する際のid */
	private static final String PRGADD_ID = "0";

	/**
	 * コンストラクタ
	 */
	public FUSV0080_FUSV0080OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをします。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return 送信情報
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV008001SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// サービスフォームBean
		X31SDataBeanAccess svcFormBean = bean[0];
		// 共有フォームBean
		X31SDataBeanAccess commoninfoBean = bean[1];

		X31SDataBeanAccess genCustKeiInfoBean = JFUWebCommon.getDataBeanTypeByPath(commoninfoBean, JFUWebCommon.GEN_CUST_KEI_INFO);

		// SYSID
		parentMap.put(SYSID, genCustKeiInfoBean.sendMessageString(CommonInfoCFConst.SYSID_21, X31CWebConst.DATABEAN_GET_VALUE));

		// 明細
		ArrayList arrayList = new ArrayList<HashMap>();
		HashMap detailMap = new HashMap();

		// 多機能ルーター交換希望有無
		String hoyuRouterCd = svcFormBean.sendMessageString(FUW03801SFConst.OWN_ROUTER_KBN, X31CWebConst.DATABEAN_GET_VALUE);
		boolean tknMskmUm = svcFormBean.sendMessageBoolean(FUW03801SFConst.SEL_TKN_ROUTER_MSKM, X31CWebConst.DATABEAN_GET_VALUE);

		// 保有ルーターが新無線
		if(JFUStrConst.CD01313_04.equals(hoyuRouterCd) || JFUStrConst.CD01313_05.equals(hoyuRouterCd))
		{
			if(tknMskmUm)
			{
				detailMap.put(TAKINORT_KKN_KIBO_UM, JFUStrConst.CD00002_1);
			}
			else
			{
				detailMap.put(TAKINORT_KKN_KIBO_UM, JFUStrConst.CD00002_0);
			}
		}

		arrayList.add(detailMap);
		parentMap.put(EKK0011D020_LIST, arrayList);

		outputMap.put(SC_TITLE_FUSV008001, parentMap);

		// メモリ開放
		parentMap = null;

		return outputMap;
	}

	/**
	 * 上りマッピングをします。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return 送信情報
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV008002SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		outputMap.put(SC_TITLE_FUSV008002, parentMap);

		// メモリ開放
		parentMap = null;

		return outputMap;
	}

	/**
	 * メール送信登録情報マッピング
	 * <br>
	 * @param bean データBean配列
	 * @param parentMap 上りマッピング用マップ
	 */
	@SuppressWarnings("unchecked")
	private void setMailInfo(X31SDataBeanAccess[] bean, HashMap parentMap)
	{
		X31SDataBeanAccessArray arraybean =
				bean[1].getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0).getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO)
						.getDataBean(0).getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO).getDataBean(0).getDataBeanArray(
								CommonInfoCFConst.SVC_KEI_UCWK_INFO).getDataBean(0).getDataBeanArray(CommonInfoCFConst.OP_SVC_KEI_INFO);

		ArrayList list = new ArrayList();
		// メールコード
		parentMap.put(MAIL_CD, JFUStrConst.MAIL_CODE_FAMILY_PACK);

		if (parentMap.containsKey(ECC0021D010CBSMSG1LIST))
		{
			list = (ArrayList)parentMap.get(ECC0021D010CBSMSG1LIST);
		}

		int abCount = arraybean.getCount();

		if (arraybean != null && abCount > 0)
		{
			for (int i = 0; i < abCount; i++)
			{
				X31SDataBeanAccess subbean = arraybean.getDataBean(i);
				HashMap childMap = null;

				if (list.size() - 1 >= i)
				{
					childMap = (HashMap)list.get(i);
				}
				else
				{
					childMap = new HashMap();
				}

				// 送信先メールアドレスリスト.送信先メールアドレス → メール送信情報登録.送信先一覧明細.送信先メールアドレス
				if (subbean != null)
				{
					String opSvcCd = subbean.sendMessageString(CommonInfoCFConst.OP_SVC_CD_28, X31CWebConst.DATABEAN_GET_VALUE);
					String opSvcKeiStat = subbean.sendMessageString(CommonInfoCFConst.OP_SVC_KEI_STAT_28, X31CWebConst.DATABEAN_GET_VALUE);
					String mlad = subbean.sendMessageString(CommonInfoCFConst.MLAD_28, X31CWebConst.DATABEAN_GET_VALUE);

					// オプションサービスコードが「Eメール」の場合
					if (JFUStrConst.CD00136_B001.equals(opSvcCd)
							&& (JFUStrConst.CD00037_020.equals(opSvcKeiStat) || JFUStrConst.CD00037_030.equals(opSvcKeiStat) || JFUStrConst.CD00037_100
									.equals(opSvcKeiStat)) && !JFUWebCommon.isNull(mlad))
					{
						childMap.put(MLAD, mlad);
						list.add(childMap);
					}
				}
			}
		}
		parentMap.put(ECC0021D010CBSMSG1LIST, list);

		// 本文非定型置換文字リスト.本文非定型置換文字 → メール送信情報登録.非定型文字列一覧明細.本文非定型置換文字
		HashMap childMap0 = new HashMap();
		HashMap childMap1 = new HashMap();

		list = new ArrayList();

		// お客様名
		childMap0.put(TEXT_HTK_CKAM_MOJI, bean[1].getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0).getDataBeanArray(
				CommonInfoCFConst.GEN_CUST_KEI_INFO).getDataBean(0).sendMessageString(CommonInfoCFConst.CUST_NM_22, X31CWebConst.DATABEAN_GET_VALUE));
		list.add(childMap0);

		parentMap.put(ECC0021D010CBSMSG2LIST, list);
		parentMap.put(ECC0021D010CBSMSG3LIST, new ArrayList());

		ArrayList list1 = new ArrayList();

		// メール明細コード
		String hoyuRouterCd = bean[0].sendMessageString(FUW03801SFConst.OWN_ROUTER_KBN, X31CWebConst.DATABEAN_GET_VALUE);
		boolean tknMskm =  bean[0].sendMessageBoolean(FUW03801SFConst.SEL_TKN_ROUTER_MSKM, X31CWebConst.DATABEAN_GET_VALUE);
		List<String> shinMusenList = Arrays.asList(JFUStrConst.CD01313_04, JFUStrConst.CD01313_05);

		if(shinMusenList.contains(hoyuRouterCd) && !tknMskm)
		{
			// 新無線ルーター、かつ、多機能ルーター申込なしの場合
			childMap1.put(MAIL_DTL_CD, JFUStrConst.MAIL_DTL_CD_FUD1000053);
		}
		else
		{
			// 上記以外の場合
			childMap1.put(MAIL_DTL_CD, bean[0].sendMessageString(FUW03801SFConst.MAIL_DTL_CD, X31CWebConst.DATABEAN_GET_VALUE));
		}

		list1.add(childMap1);
		parentMap.put(ECC0021D010CBSMSG4LIST, list1);
		parentMap.put(ECC0021D010CBSMSG5LIST, new ArrayList());
	}

	/**
	 * 上りマッピングをします。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return 送信情報
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV008001CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// サービスフォームBean
		X31SDataBeanAccess svcFormBean = bean[0];
		// 共有フォームBean
		X31SDataBeanAccess commoninfoBean = bean[1];
		// 契約サービス情報
		X31SDataBeanAccess svcKeiInfoBean = JFUWebCommon.getDataBeanTypeByPath(commoninfoBean, JFUWebCommon.SVC_KEI_INFO);

		parentMap.put(KEY_SVC_KEI_NO, svcKeiInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, X31CWebConst.DATABEAN_GET_VALUE));
		parentMap.put(KEY_WRIB_TYPE_CD, JFUStrConst.CD00284_20);
		parentMap.put(MSKM_NO, null);
		parentMap.put(MSKM_DTL_NO, null);
		parentMap.put(MSKMSHO_NO, null);
		parentMap.put(RSV_APLY_YMD, null);
		parentMap.put(IDO_DIV, JFUStrConst.CD00576_00049);
		parentMap.put(YOKYU_SBT_CD, JFUStrConst.CD00317_04);

		// 進捗特記事項1
		try
		{
			String prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW03802, PRGADD_ID);

			if (prgTkjk1 != null && prgTkjk1.length() > 0)
			{
				parentMap.put(PRG_TKJK_1, prgTkjk1);
			}
			else
			{
				DEBUG_LOG.debug("※進捗特記事項1がXMLから正常に取得できませんでした。処理は続行します。");
			}
		}
		catch (Exception e)
		{
			DEBUG_LOG.debug("※進捗特記事項1がXMLから正常に取得できませんでした。処理は続行します。");
		}

		// 多機能ルーター申込有無
		if(svcFormBean.sendMessageBoolean(FUW03801SFConst.SEL_TKN_ROUTER_MSKM, X31CWebConst.DATABEAN_GET_VALUE))
		{
			// 申し込む場合「1」
			parentMap.put(TKN_ROUTER_CHG_UM, JFUStrConst.CD00002_1);
		}
		else
		{
			// 申し込まない場合「0」
			parentMap.put(TKN_ROUTER_CHG_UM, JFUStrConst.CD00002_0);
		}

		outputMap.put(CC_TITLE_FUSV008001, parentMap);

		// メモリ開放
		parentMap = null;

		return outputMap;
	}

	/**
	 * 上りマッピングをします。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return 送信情報
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setFUSV008002CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共有フォームBean
		X31SDataBeanAccess commoninfoBean = bean[1];
		// 契約サービス情報
		X31SDataBeanAccess svcKeiInfoBean = JFUWebCommon.getDataBeanTypeByPath(commoninfoBean, JFUWebCommon.SVC_KEI_INFO);

		parentMap.put(KEY_SVC_KEI_NO, svcKeiInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_NO_23, X31CWebConst.DATABEAN_GET_VALUE));
		parentMap.put(WRIB_SVC_CD, JFUStrConst.KK0841_WRIB_SVC_CD_FAMIPA);
		parentMap.put(WRIB_SVC_TRGT_SVC_CD, JFUStrConst.KK0851_WRIB_SVC_TRGT_SVC_CD_FAMIPA);
		parentMap.put(PCRS_CD, JFUStrConst.CD00134_F01);
		parentMap.put(PPLAN_CD, JFUStrConst.CD00565_PF0101);
		parentMap.put(MSKM_NO, null);
		parentMap.put(MSKM_DTL_NO, null);
		parentMap.put(MSKMSHO_NO, null);
		parentMap.put(RSV_APLY_YMD, null);
		parentMap.put(IDO_DIV, JFUStrConst.CD00576_00049);
		parentMap.put(YOKYU_SBT_CD, JFUStrConst.CD00317_04);

		// 進捗特記事項1
		try
		{
			String prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW03802, PRGADD_ID);

			if (prgTkjk1 != null && prgTkjk1.length() > 0)
			{
				parentMap.put(PRG_TKJK_1, prgTkjk1);
			}
			else
			{
				DEBUG_LOG.debug("※進捗特記事項1がXMLから正常に取得できませんでした。処理は続行します。");
			}
		}
		catch (Exception e)
		{
			DEBUG_LOG.debug("※進捗特記事項1がXMLから正常に取得できませんでした。処理は続行します。");
		}
		setMailInfo(bean, parentMap);
		outputMap.put(CC_TITLE_FUSV008002, parentMap);

		// メモリ開放
		parentMap = null;

		return outputMap;
	}
}