/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0256_FUSV0256OPDBMapper
*	ソースファイル名：FUSV0256_FUSV0256OPDBMapper.java
*	作成者			：富士通
*	日付			：2013年02月25日
*＜機能概要＞
*	BP(マンション割引情報取得)へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00		2013/02/25	FJ)大塚     No356 新規作成
*	v5.00		2013/03/08	FJ)大村     OT-2013-0000348 >>>同一マンション割引情報の重複対応
*   v60.00      2022/06/20  FJ）美濃原  【ANK-4244-00-00】【eo定期】MT既設賃貸対応
*   v73.00      2024/11/15  FJ) 張本    【ANK-4493-00-00】【eo定期】光配線マンションのコースアップ対応
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.common.JCMConstants;
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.FUW00129SF.FUW00129SFConst;
import eo.web.webview.FUW00134SF.FUW00134SFConst;
import eo.web.webview.common.JFUGetManmosKanri;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをします。
 * 
 * <br>
 * @author 富士通
 */
public class FUSV0269_FUSV0269OPDBMapper
{

	/**
	 * 上りマッピングをします。(割引サービスコード検索CC)
	 * 
	 * <br>
	 * @param bean  [0]：マンション検索
	 * @param outputMap
	 * @param func_code  機能コード
	 * @param index -1の場合、FUW00129からの遷移とする。
	 * @return HashMap
	 */
	public HashMap<String, Object> setFUSV026901CC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, String func_code, int index)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		HashMap<String, Object> childMap = new HashMap<String, Object>();
		ArrayList<Object> childList = new ArrayList<Object>();

		// 共通情報のマッピング
		parentMap.put(JCMConstants.FUNC_CODE_KEY, func_code);

		String[] net_campaign_cd_list = null;
		String[] tv_campaign_cd_list = null;

		// eo光eoモバイル契約一覧からの遷移の場合
		if (index == -1)
		{
			// カンマで分割し配列に保持します。
			net_campaign_cd_list =
					bean[0].sendMessageString(FUW00129SFConst.NET_MANS_CAMPAIGN_CD_03, X31CWebConst.DATABEAN_GET_VALUE).split(JFUStrConst.COMMA);

			tv_campaign_cd_list =
					bean[0].sendMessageString(FUW00129SFConst.TV_MANS_CAMPAIGN_CD_03, X31CWebConst.DATABEAN_GET_VALUE).split(JFUStrConst.COMMA);
		}
		else
		{
			// 合致するインデックスのマンション一覧を取得する。
			X31SDataBeanAccess ekk0861B501CmsMsg1 = bean[0].getDataBeanArray("マンション一覧").getDataBean(index);

			// カンマで分割し配列に保持します。
			net_campaign_cd_list =
					ekk0861B501CmsMsg1.sendMessageString(FUW00134SFConst.NET_MANS_CAMPAIGN_CD_01, X31CWebConst.DATABEAN_GET_VALUE).split(
							JFUStrConst.COMMA);
			tv_campaign_cd_list =
					ekk0861B501CmsMsg1.sendMessageString(FUW00134SFConst.TV_MANS_CAMPAIGN_CD_01, X31CWebConst.DATABEAN_GET_VALUE).split(
							JFUStrConst.COMMA);

		}

		for (int i = 0; i < net_campaign_cd_list.length; i++)
		{
			if (!isBlank(net_campaign_cd_list[i]))
			{
				childMap = new HashMap<String, Object>();
				// 空白を削除する
				net_campaign_cd_list[i] = JFUWebCommon.trim(net_campaign_cd_list[i]);

				// KEY_表示用キャンペーンコード 8桁まで0詰めする
				childMap.put("key_dsp_campaign_cd", JFUWebCommon.fillZero(net_campaign_cd_list[i], 8, false));

				childList.add(childMap);
			}
		}

		for (int i = 0; i < tv_campaign_cd_list.length; i++)
		{
			if (!isBlank(tv_campaign_cd_list[i]))
			{
				childMap = new HashMap<String, Object>();
				// 空白を削除する
				tv_campaign_cd_list[i] = JFUWebCommon.trim(tv_campaign_cd_list[i]);

				// KEY_表示用キャンペーンコード 8桁まで0詰めする
				childMap.put("key_dsp_campaign_cd", JFUWebCommon.fillZero(tv_campaign_cd_list[i], 8, false));

				childList.add(childMap);
			}
		}

		parentMap.put("campaign_cd_list", childList);

		outputMap.put("JFUSearchWribSvcCdCC", parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピングをします。(割引サービスコード検索CC)
	 * 
	 * <br> 
	 * @param bean [0]:マンション検索 [1]:共有フォームBean 
	 * @param outputMap
	 * @return X31SDataBeanAccess
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV026901CC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap)
	{
		HashMap parentMap = null;
		if (outputMap.containsKey("JFUSearchWribSvcCdCC"))
		{
			parentMap = (HashMap)outputMap.get("JFUSearchWribSvcCdCC");
		}

		ArrayList childList = null;

		// WEB新規情報
		X31SDataBeanAccess webNewInfoBean = getWebInfo(bean[1]);

		// マンション情報
		X31SDataBeanAccess mansionInfoBean = getMansioninfo(webNewInfoBean);

		childList = new ArrayList();

		if (mansionInfoBean != null && parentMap != null && parentMap.containsKey("searchWribSvcCdList"))
		{
			childList = (ArrayList)parentMap.get("searchWribSvcCdList");

			// 重複チェック用リスト
			ArrayList wribList = new ArrayList();
			ArrayList dchsList = new ArrayList();

			String wrib_svc_cd = "";
			String dchskm_cd = "";

			// OT-2013-0000348 >>>同一マンション割引情報の重複対応
			// 最初にクリア
			mansionInfoBean.sendMessage(CommonInfoCFConst.MANS_WRIB_SVC_CD_16, X31CWebConst.DATABEAN_CLEAR);
			// OT-2013-0000348 <<<E
			for (int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);

				if (childMap != null)
				{
					// 割引サービスコードが存在する場合
					if (childMap.containsKey("wrib_svc_cd"))
					{
						wrib_svc_cd = (String)childMap.get("wrib_svc_cd");

						// 同じ割引サービスコードが存在しない場合
						if (!wribList.contains(wrib_svc_cd))
						{
							// マンション情報.マンション割引サービスコード
							mansionInfoBean.sendMessageString(CommonInfoCFConst.MANS_WRIB_SVC_CD_16, X31CWebConst.DATABEAN_ADD_VALUE, wrib_svc_cd);

							wribList.add(wrib_svc_cd);
						}
					}

					// データ抽出項目コードが存在する場合
					if (childMap.containsKey("dchskm_cd"))
					{
						dchskm_cd = (String)childMap.get("dchskm_cd");

						// 同じ割引サービスコードが存在しない場合
						if (!dchsList.contains(dchskm_cd))
						{
							// マンション情報.マンション割引サービスコード
							mansionInfoBean.sendMessageString(CommonInfoCFConst.MANS_WRIB_SVC_CD_16, X31CWebConst.DATABEAN_ADD_VALUE, dchskm_cd);

							dchsList.add(dchskm_cd);
						}
					}
				}
			}
		}

		return bean;
	}

	/**
	 * 値が設定されているか判定する
	 * <br>
	 * @param obj 対象オブジェクト
	 * @return 判定結果
	 */
	@SuppressWarnings("unchecked")
	private boolean isBlank(Object obj)
	{
		boolean ret = false;
		if (obj == null)
		{
			// オブジェクトがNull
			ret = true;
		}
		else if (obj instanceof String)
		{
			// String型の場合
			if (JFUStrConst.EMPTY.equals(obj))
			{
				ret = true;
			}
		}
		else if (obj instanceof ArrayList)
		{
			// ArrayList型の場合
			if (((ArrayList)obj).isEmpty())
			{
				ret = true;
			}
		}
		else if (obj instanceof HashMap)
		{
			// HashMap型の場合
			if (((HashMap)obj).isEmpty())
			{
				ret = true;
			}
		}

		return ret;
	}

	/**
	 * 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;
	}

	/**
	 * マンション情報
	 * 
	 * @param bn
	 * @return bn1
	 */
	private X31SDataBeanAccess getMansioninfo(X31SDataBeanAccess bn)
	{
		X31SDataBeanAccessArray arr = bn.getDataBeanArray(CommonInfoCFConst.MANSION_INFO);
		if (arr.getCount() == 0)
		{
			arr.addDataBean();
		}
		X31SDataBeanAccess bn1 = arr.getDataBean(0);

		return bn1;
	}

	/**
	 * 上りマッピングをします。(MT管理情報照会(MANMOS)照会CC)
	 * 
	 * <br>
	 * @param bean  [0]：マンション検索
	 * @param outputMap
	 * @param func_code  機能コード
	 * @param index -1の場合、FUW00129からの遷移とする。
	 * @return HashMap
	 */
	public HashMap<String, Object> setFUSV026902CC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap, String func_code, int index)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(JCMConstants.FUNC_CODE_KEY, func_code);

		// eo光eoモバイル契約一覧からの遷移の場合
		if (index == -1)
		{
			String hhs1gOnlyFlg =  bean[0].sendMessageString(CommonInfoCFConst.HHS_1GONLY_FLG_16, X31CWebConst.DATABEAN_GET_VALUE);
			String pId =  bean[0].sendMessageString(CommonInfoCFConst.SHUGO_PID_18, X31CWebConst.DATABEAN_GET_VALUE);
			String key_seq =  bean[0].sendMessageString(CommonInfoCFConst.KAISEN_PLACE_RENBAN_16, X31CWebConst.DATABEAN_GET_VALUE);
			String tkHoshikiPtnCd =  bean[0].sendMessageString(FUW00129SFConst.TK_HOSHIKI_PATTERN_CD_03, X31CWebConst.DATABEAN_GET_VALUE);
			parentMap.put("key_pid", pId);
			parentMap.put("key_seq", key_seq);
			if (JFUStrConst.HHS_1GONLY_FLG_1.equals(hhs1gOnlyFlg) || JFUStrConst.CD01213_53.equals(tkHoshikiPtnCd))
			{
				// ※光配線1Gのみフラグの場合（※光配線1Gのみフラグ＝光化マンションフラグ）
				parentMap.put("hikarika_mans_flg", JFUStrConst.HIKARIKA_MANS_FLG_1);
			}
			else
			{
				parentMap.put("hikarika_mans_flg", JFUStrConst.EMPTY);
			}
		} else {
			X31SDataBeanAccess ekk0861B501CmsMsg1 = bean[0].getDataBeanArray("マンション一覧").getDataBean(index);
			String pId = ekk0861B501CmsMsg1.sendMessageString(FUW00134SFConst.PID_01, X31CWebConst.DATABEAN_GET_VALUE);
			String hhs1gOnlyFlg = ekk0861B501CmsMsg1.sendMessageString(FUW00134SFConst.HHS_1GONLY_FLG_01, X31CWebConst.DATABEAN_GET_VALUE);
			String tkHoshikiPtnCd = ekk0861B501CmsMsg1.sendMessageString(FUW00134SFConst.TK_HOSHIKI_PATTERN_CD_01, X31CWebConst.DATABEAN_GET_VALUE);

			parentMap.put("key_pid", pId);
			if (JFUStrConst.HHS_1GONLY_FLG_1.equals(hhs1gOnlyFlg) || JFUStrConst.CD01213_53.equals(tkHoshikiPtnCd))
			{
				// ※光配線1Gのみフラグの場合（※光配線1Gのみフラグ＝光化マンションフラグ）
				parentMap.put("hikarika_mans_flg", JFUStrConst.HIKARIKA_MANS_FLG_1);
			}
			else
			{
				parentMap.put("hikarika_mans_flg", JFUStrConst.EMPTY);
			}
		}
		outputMap.put("JFUGetManmosKanriInfoCC", parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピングをします。(MT管理情報照会(MANMOS)照会CC)
	 * ※新規申込、回線追加申込用
	 * 
	 * <br> 
	 * @param bean [0]:マンション検索 [1]:共有フォームBean 
	 * @param outputMap
	 * @return X31SDataBeanAccess
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV026902CC(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap)
	{
		HashMap parentMap = null;
		if (outputMap.containsKey("JFUGetManmosKanriInfoCC"))
		{
			parentMap = (HashMap)outputMap.get("JFUGetManmosKanriInfoCC");
		}

		// WEB新規情報
		X31SDataBeanAccess webNewInfoBean = getWebInfo(bean[1]);
		// マンション情報
		X31SDataBeanAccess mansionInfoBean = getMansioninfo(webNewInfoBean);

		JFUGetManmosKanri.setBeanManmosKnriInfoList(mansionInfoBean, outputMap);

		return bean;
	}

	/**
	 * 下りマッピングをします。(MT管理情報照会(MANMOS)照会CC)
	 * ※サービス追加（同一回線場所）用
	 * 
	 * <br> 
	 * @param bean [0]:マンション検索 [1]:共有フォームBean 
	 * @param outputMap
	 * @return X31SDataBeanAccess
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV026902CcSvcAdd(X31SDataBeanAccess[] bean, HashMap<String, Object> outputMap)
	{
		HashMap parentMap = null;
		if (outputMap.containsKey("JFUGetManmosKanriInfoCC"))
		{
			parentMap = (HashMap)outputMap.get("JFUGetManmosKanriInfoCC");
		}

		// WEB新規情報
		X31SDataBeanAccess webNewInfoBean = getWebInfo(bean[1]);
		// マンション情報
		X31SDataBeanAccess mansionInfoBean = getMansioninfo(webNewInfoBean);

		JFUGetManmosKanri.setBeanManmosKnriInfoHeya(mansionInfoBean, outputMap);

		return bean;
	}

}