/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0295_FUSV0295OPDBMapper
*	ソースファイル名：FUSV0295_FUSV0295OPDBMapper.java
*	作成者			：FJ
*	日付			：2016年05月06日
*＜機能概要＞
*	BP（JP案件中eo光ネットホームタイププラン変更申込(申込)）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v24.0.0		2016/05/06	FJ)西川		ANK-2778-00-00_E-PON巻取り工事（JP案件）立上中のコース変更WEB申込について　新規作成
*   v41.00      2019/02/27  FJ)張本     ANK-3412-17-00_【５ギガ・１０ギガ】EG切替中のコース変更登録時のチケット利用情報連携
*   v48.00      2020/01/29  FJ）大島    変更【ANK-3777-00-00】【10G】コース変更時のWEB導線見直し
*
**********************************************************************/
package eo.web.webview.mapping;

import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;
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.common.constant.JPCModelConstant;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW01301SF.FUW01301SFConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをします。
 *
 * @author 富士通
 */
public class FUSV0295_FUSV0295OPDBMapper
{
	/** 5G・10Gルーター機器自動交換CCマップ */
	private static final String JKK_ROUTER_KIKI_ATKN_CMN_CC = "JKKRouterKikiAtknCmnCC";
	/** 定義取得パス eoプレミアムクラブ施策名称 */
	private static final String QUERY_PATH_SISAK_NM = "DISPSETTING/SETTING[@screenId='FUW01301']/DISPTEXT[@groupid='EOPRMCL_SISAK_NM']";

	/**
	 * コンストラクタ
	 */
	public FUSV0295_FUSV0295OPDBMapper()
	{
	}

	/**
	 * 上りマッピング処理です。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @return
	 * @throws Exception 
	 */
	public HashMap<String, Object> setFUSV029501CC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, X31BWebBusinessLogic bl) throws Exception
	{
		String yyyyMMDDhhmmssSSS = JFUWebCommon.getOpeDateTimeStamp(bl, null);

		HashMap<String, String> hTPlanChgMap = new HashMap<String, String>();
		hTPlanChgMap = setParamMap(bean, hTPlanChgMap, yyyyMMDDhhmmssSSS);
		outputMap.put("HTPlanChg", hTPlanChgMap);

		HashMap<String, String> jpAnKCancelMap = new HashMap<String, String>();
		jpAnKCancelMap = setParamMap(bean, jpAnKCancelMap, yyyyMMDDhhmmssSSS);
		outputMap.put("JpAnKCancel", jpAnKCancelMap);

		// チケット利用申請
		X31SDataBeanAccessArray arraybean = bean[0].getDataBeanArray(FUW01301SFConst.TICKET_USE_SHIN_IRAI_LIST);
// ANK-3777-00-00 ADD START
		X31SDataBeanAccessArray sisakListBean = bean[0].getDataBeanArray(FUW01301SFConst.TICKET_USE_SHIN_IRAI_LIST);
// ANK-3777-00-00 ADD END
		int cnt = 0;
		if (arraybean != null && arraybean.getCount() > 0)
		{
			// チケット利用選択
			String ticUseSelect = bean[0].sendMessageString(FUW01301SFConst.TIC_USE_SELECT, X31CWebConst.DATABEAN_GET_VALUE);
			int sel = Integer.parseInt(ticUseSelect);
			
			// cnt=0はeoチケット申請無しなので削除
			arraybean.removeDataBean(cnt);
			sel--;
			while (cnt < arraybean.getCount())
			{
				X31SDataBeanAccess subbean = arraybean.getDataBean(cnt);

				// 選ばれていないチケットは削除
				if (subbean == null || cnt != sel)
				{
					// 選択してないデータをリストから削除する
					arraybean.removeDataBean(cnt);
					sel--;
					continue;
				}
				else
				{
					// チケット残枚数
					hTPlanChgMap.put("tic_num", bean[0].sendMessageString(FUW01301SFConst.TIC_NUM, X31CWebConst.DATABEAN_GET_VALUE));
// ANK-3777-00-00 MOD START
					// 施策コード
					String sisakCd = subbean.sendMessageString(FUW01301SFConst.SISAK_CD_11, X31CWebConst.DATABEAN_GET_VALUE);
					String[] sisakcdL = sisakCd.split(JFUStrConst.COMMA);
					StringBuilder sisakNm = new StringBuilder();
					// ■複合チケットも含まれているので繰り返し実行
					for (int idx = 0; idx < sisakcdL.length; idx++)
					{
						String sisakNmWk = JFUStrConst.EMPTY;
						if (!JFUStrConst.EMPTY.equals(sisakcdL[idx]))
						{
							// 施策名を取得
							sisakNmWk = JFUWebCommon.getDispItemsAsMap(QUERY_PATH_SISAK_NM, "id").get(sisakcdL[idx]);
							
						}
						if (idx == 0)
						{
							sisakNm = sisakNm.append(sisakNmWk);
						}
						else
						{
							sisakNm = sisakNm.append("、").append(sisakNmWk);
						}
					}
					// 利用施策
//					hTPlanChgMap.put("sisak_nm", subbean.sendMessageString(FUW01301SFConst.SISAK_NM_11, X31CWebConst.DATABEAN_GET_VALUE));
					hTPlanChgMap.put("sisak_nm", sisakNm.toString());
// ANK-3777-00-00 MOD END
					// 必要チケット枚数
					hTPlanChgMap.put("necessary_ticket_cnt", subbean.sendMessageString(FUW01301SFConst.NECESSARY_TICKET_CNT_11, X31CWebConst.DATABEAN_GET_VALUE));
					cnt++;
				}
			}
		}
		return outputMap;
	}

	/**
	 * 上りマッピング処理です。
	 * 
	 * <br>
	 * @param bean
	 * @param inMap
	 * @param yyyyMMDDhhmmssSSS
	 * @return
	 */
	private HashMap<String, String> setParamMap(X31SDataBeanAccess[] bean, HashMap<String, String> inMap, String yyyyMMDDhhmmssSSS)
	{
		// 年月日時分秒ミリ秒
		inMap.put("YYYYMMDDhhmmssSSS", yyyyMMDDhhmmssSSS);
		// 変更後の料金コース名
		inMap.put("chg_pcrs_nm", bean[0].sendMessageString(FUW01301SFConst.CHG_PCRS_NM, X31CWebConst.DATABEAN_GET_VALUE));
		// 変更後の即割状態
		inMap.put("chg_sel_sokuwari", bean[0].sendMessageString(FUW01301SFConst.CHG_SEL_SOKUWARI, X31CWebConst.DATABEAN_GET_VALUE));
		// 変更後の高速割状態
		inMap.put("chg_sel_kosokuwari", bean[0].sendMessageString(FUW01301SFConst.CHG_SEL_KOSOKUWARI, X31CWebConst.DATABEAN_GET_VALUE));
		// 現顧客契約情報 お客様名
		inMap.put("cust_nm", bean[4].sendMessageString(CommonInfoCFConst.CUST_NM_22, X31CWebConst.DATABEAN_GET_VALUE));
		// 表示用・送付先住所／住所
		inMap.put("disp_sendto_address", bean[0].sendMessageString(FUW01301SFConst.DISP_SENDTO_ADDRESS, X31CWebConst.DATABEAN_GET_VALUE));
		// 表示用・送付先住所／氏名
		inMap.put("disp_sendto_name", bean[0].sendMessageString(FUW01301SFConst.DISP_SENDTO_NAME, X31CWebConst.DATABEAN_GET_VALUE));
		// 表示用・送付先住所／氏名かな
		inMap.put("disp_sendto_name_kana", bean[0].sendMessageString(FUW01301SFConst.DISP_SENDTO_NAME_KANA, X31CWebConst.DATABEAN_GET_VALUE));
		// 表示用・送付先住所／電話番号
		inMap.put("disp_sendto_telno", bean[0].sendMessageString(FUW01301SFConst.DISP_SENDTO_TELNO, X31CWebConst.DATABEAN_GET_VALUE));
		// 表示用・送付先住所／郵便番号
		inMap.put("disp_sendto_zip_cd", bean[0].sendMessageString(FUW01301SFConst.DISP_SENDTO_ZIP_CD, X31CWebConst.DATABEAN_GET_VALUE));
		// 現在の長割状態名称
		inMap.put("now_chowari_stat", bean[0].sendMessageString(FUW01301SFConst.NOW_CHOWARI_STAT, X31CWebConst.DATABEAN_GET_VALUE));
		// 現在の自動継続状態名称
		inMap.put("now_ib_svc_kei_at_keizk_stat", bean[0].sendMessageString(FUW01301SFConst.NOW_IB_SVC_KEI_AT_KEIZK_STAT,
				X31CWebConst.DATABEAN_GET_VALUE));
		// 現在の料金プラン名
		inMap.put("now_plan_nm", bean[0].sendMessageString(FUW01301SFConst.NOW_PLAN_NM, X31CWebConst.DATABEAN_GET_VALUE));
		// 現在の即割状態
		inMap.put("now_sel_sokuwari", bean[0].sendMessageString(FUW01301SFConst.NOW_SEL_SOKUWARI, X31CWebConst.DATABEAN_GET_VALUE));
		// 現在の即割状態名称
		inMap.put("now_sokuwari_stat", bean[0].sendMessageString(FUW01301SFConst.NOW_SOKUWARI_STAT, X31CWebConst.DATABEAN_GET_VALUE));
		// 現在の高速割状態
		inMap.put("now_sel_kosokuwari", bean[0].sendMessageString(FUW01301SFConst.NOW_SEL_KOSOKUWARI, X31CWebConst.DATABEAN_GET_VALUE));
		// 現在の高速割状態名称
		inMap.put("now_kosokuwari_stat", bean[0].sendMessageString(FUW01301SFConst.NOW_KOSOKUWARI_STAT, X31CWebConst.DATABEAN_GET_VALUE));
		// 現在のサービス名		
		inMap.put("now_svc_nm", bean[0].sendMessageString(FUW01301SFConst.NOW_SVC_NM, X31CWebConst.DATABEAN_GET_VALUE));
		// 保有ルーター区分
		inMap.put("own_router_kbn", bean[0].sendMessageString(FUW01301SFConst.OWN_ROUTER_KBN, X31CWebConst.DATABEAN_GET_VALUE));
		// ルーター速度種別
		inMap.put("router_speed_sbt", bean[0].sendMessageString(FUW01301SFConst.ROUTER_SPEED_SBT, X31CWebConst.DATABEAN_GET_VALUE));
		// ＩＤ登録証送付先住所選択
		inMap.put("send_address", bean[0].sendMessageString(FUW01301SFConst.SEND_ADDRESS, X31CWebConst.DATABEAN_GET_VALUE));
		// 即割表示フラグ
		inMap.put("skwr_disp_flg", bean[0].sendMessageString(FUW01301SFConst.SKWR_DISP_FLG, X31CWebConst.DATABEAN_GET_VALUE));
		// サービス契約番号
		inMap.put("svc_kei_no", bean[1].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_21, X31CWebConst.DATABEAN_GET_VALUE));
		// SYSID
		inMap.put("sysid", bean[1].sendMessageString(CommonInfoCFConst.SYSID_21, X31CWebConst.DATABEAN_GET_VALUE));
		// JP案件工事番号
		inMap.put("jp_ank_kojiak_no", bean[0].sendMessageString(FUW01301SFConst.JP_ANK_KOJIAK_NO, X31CWebConst.DATABEAN_GET_VALUE));
		// 現在の料金コースコード
		inMap.put("now_pcrs_cd", bean[0].sendMessageString(FUW01301SFConst.NOW_PCRS_CD, X31CWebConst.DATABEAN_GET_VALUE));
		// 変更後の料金コースコード
		inMap.put("chg_pcrs_cd", bean[0].sendMessageString(FUW01301SFConst.CHG_PCRS_CD, X31CWebConst.DATABEAN_GET_VALUE));

		X31SDataBeanAccess routerInfoBean = getRouterInfo(bean[2]);
		if (routerInfoBean != null)
		{
			inMap.put("kktk_svc_kei_no", routerInfoBean.sendMessageString(CommonInfoCFConst.KKTK_SVC_KEI_NO_27, X31CWebConst.DATABEAN_GET_VALUE));
			inMap.put("kiki_seizo_no", routerInfoBean.sendMessageString(CommonInfoCFConst.KIKI_SEIZO_NO_27, X31CWebConst.DATABEAN_GET_VALUE));
		}
		else
		{
			inMap.put("kktk_svc_kei_no", "");
			inMap.put("kiki_seizo_no", "");
		}
// ANK-3777-00-00 ADD START
		String router_mskm = "-";
		if ("1".equals(bean[0].sendMessageString(FUW01301SFConst.ROUTER_MSKM_PTN, X31CWebConst.DATABEAN_GET_VALUE)) 
				|| "2".equals(bean[0].sendMessageString(FUW01301SFConst.ROUTER_MSKM_PTN, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			if (bean[0].sendMessageBoolean(FUW01301SFConst.TKN_ROUTER_MUSEN_MSKM, X31CWebConst.DATABEAN_GET_VALUE))
			{
				router_mskm = "申し込む（無線）";
			}
			else if (bean[0].sendMessageBoolean(FUW01301SFConst.TKN_ROUTER_YUSEN_MSKM, X31CWebConst.DATABEAN_GET_VALUE))
			{
				router_mskm = "申し込む（有線）";
			}
		}
		else if ("3".equals(bean[0].sendMessageString(FUW01301SFConst.ROUTER_MSKM_PTN, X31CWebConst.DATABEAN_GET_VALUE)) 
					|| "4".equals(bean[0].sendMessageString(FUW01301SFConst.ROUTER_MSKM_PTN, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			if (bean[0].sendMessageBoolean(FUW01301SFConst.TKN_ROUTER_MUSEN_MSKM, X31CWebConst.DATABEAN_GET_VALUE))
			{
				router_mskm = "変更（有線→無線）";
			}
			else if (bean[0].sendMessageBoolean(FUW01301SFConst.TKN_ROUTER_YUSEN_MSKM, X31CWebConst.DATABEAN_GET_VALUE))
			{
				router_mskm = "変更（無線→有線）";
			}
		}
		inMap.put("router_mskm", router_mskm);
// ANK-3777-00-00 ADD END
		return inMap;
	}

	/**
	 * ルーター情報取得処理。
	 * 
	 * <br>
	 * @param bean サービス契約情報Bean
	 * @return
	 */
	private X31SDataBeanAccess getRouterInfo(X31SDataBeanAccess bean)
	{
		X31SDataBeanAccess takinoRouterInfoBean = null;
		X31SDataBeanAccess routerInfoBean = null;
		// ★機器提供サービス契約情報(サービス契約情報の子)を取得
		X31SDataBeanAccessArray kktkSvcKeiInfoArray = bean.getDataBeanArray(CommonInfoCFConst.KKTK_SVC_KEI_INFO);
		int kktkSvcKeiListSize = kktkSvcKeiInfoArray.getCount();
		for (int k = 0; k < kktkSvcKeiListSize; k++)
		{
			// 機器提供サービス契約ステータス
			String kktkSvcKeiStat =
					kktkSvcKeiInfoArray.getDataBean(k).sendMessageString(CommonInfoCFConst.KKTK_SVC_KEI_STAT_27, X31CWebConst.DATABEAN_GET_VALUE);
			// 機器提供サービスコード
			String kktkSvcCd =
					kktkSvcKeiInfoArray.getDataBean(k).sendMessageString(CommonInfoCFConst.KKTK_SVC_CD_27, X31CWebConst.DATABEAN_GET_VALUE);

			// ルーターの情報を取得
			if (!JFUStrConst.CD00055_910.equals(kktkSvcKeiStat) && !JFUStrConst.CD00055_920.equals(kktkSvcKeiStat))
			{
				if (JFUStrConst.CD00132_C024.equals(kktkSvcCd))
				{
					// 多機能ルーターが存在する場合

					String kikiSeizoNo =
							kktkSvcKeiInfoArray.getDataBean(k).sendMessageString(CommonInfoCFConst.KIKI_SEIZO_NO_27, X31CWebConst.DATABEAN_GET_VALUE);
					if (!JFUWebCommon.isNull(kikiSeizoNo))
					{
						takinoRouterInfoBean = kktkSvcKeiInfoArray.getDataBean(k);
					}
				}
				else if (JFUStrConst.CD00132_C014.equals(kktkSvcCd))
				{
					// 多機能ルーター以外のルーターが存在する場合

					String kikiSeizoNo =
							kktkSvcKeiInfoArray.getDataBean(k).sendMessageString(CommonInfoCFConst.KIKI_SEIZO_NO_27, X31CWebConst.DATABEAN_GET_VALUE);
					if (!JFUWebCommon.isNull(kikiSeizoNo))
					{
						routerInfoBean = kktkSvcKeiInfoArray.getDataBean(k);
					}
				}
			}
		}
		return takinoRouterInfoBean != null ? takinoRouterInfoBean : routerInfoBean;
	}

	/**
	 * 上りマッピング処理です。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> setJKKRouterKikiAtknCmnCC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, X31BWebBusinessLogic bl)
	{

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// サービス契約番号
		parentMap.put("svc_kei_no", bean[1].sendMessageString(CommonInfoCFConst.SVC_KEI_NO_21, X31CWebConst.DATABEAN_GET_VALUE));
		// サービス契約番号
		parentMap.put("ido_div", JFUStrConst.CD00576_00009);
		// 料金コースコード
		parentMap.put("pcrs_cd", bean[0].sendMessageString(FUW01301SFConst.CHG_PCRS_CD, X31CWebConst.DATABEAN_GET_VALUE));
		// サービス契約番号
		parentMap.put("func_cd", JPCModelConstant.FUNC_CD_1);

		
		outputMap.put(JKK_ROUTER_KIKI_ATKN_CMN_CC, parentMap);

		return outputMap;
	}
}