/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JFUEditMskmInfo
*	ソースファイル名：JFUEditMskmInfo.java
*	作成者			：富士通
*	日付			：2012年05月10日
*＜機能概要＞
*	申込情報共通処理のクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v5.00		2013/08/09	FJ)文元 	新規作成
*   v10.00      2014/09/25	FJ)文元 	【OM-2014-0003119】電話単独時契約付加未設定対応
*   v56.00      2021/12/06  FJ）美濃原  【ANK-4103-00-00】マンション光コンセントタイプのWeb受付対応
*
**********************************************************************/
package eo.web.webview.common;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

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.util.JPCCommonUtil;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;

public class JFUEditMskmInfo extends JPCCommonUtil
{
	/** 1:選択 */
	private static final String SENTAKU = "1";

	/** 無効サービス契約ステータスリスト */
	private static final List<String> MUKOU_KIKI_SVC_KEI_STAT_LIST =
			Arrays.asList(JFUStrConst.CD00037_910, JFUStrConst.CD00037_920);
	
	/**
	 * 申込明細の契約付加コード取得
	 *
	 * @param bl ビューロジックへの参照
	 * @return 申込明細の契約付加コードの設定値
	 */
	public static String editMskmDtlkeiHukaCd(X31BWebBusinessLogic bl) throws Exception
	{
		String ret = JFUStrConst.EMPTY;
		
		//●共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = bl.getCommonInfoBean();
		// WEB新規情報
		X31SDataBeanAccess bnWebinfo = getWebInfo(commonInfoBean);
		// 契約サービス情報
		X31SDataBeanAccess bnKeiService = getKeiyakusvcinfo(bnWebinfo);
		// マンション情報
		X31SDataBeanAccess bnMansioninfo = getMansioninfo(bnWebinfo);
		// 光ネットj情報
		X31SDataBeanAccess bnEonet = getEonet(bnWebinfo);
		// その他情報
		X31SDataBeanAccess bnElseinfo = getElseInfo(bnWebinfo);	
		
		//●変数保持
		// 選択サービス（ネット）
		String sle_svc_net = bnKeiService.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10, X31CWebConst.DATABEAN_GET_VALUE);
		// 選択サービス（電話）
		String sle_svc_tel = bnKeiService.sendMessageString(CommonInfoCFConst.SELECT_SVC_TEL_10, X31CWebConst.DATABEAN_GET_VALUE);
		// 申込回線サービス
		String mskm_ksn_svc = bnWebinfo.sendMessageString(CommonInfoCFConst.MSKM_KSN_SVC_06, X31CWebConst.DATABEAN_GET_VALUE);
		// 申込マンションタイプ
		String mskm_mns_type = bnWebinfo.sendMessageString(CommonInfoCFConst.MSKM_MNS_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE);
		// 提供方式パターンコード
		String teikyo_hoshiki_ptn_cd = bnMansioninfo.sendMessageString(CommonInfoCFConst.TEIKYO_HOSHIKI_PTN_CD_16, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約付加（レンタル）コード
		String kei_huka_rent_cd = bnMansioninfo.sendMessageString(CommonInfoCFConst.KEI_HUKA_RENT_CD_16, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約付加（買取）コード
		String kei_huka_kaitori_cd = bnMansioninfo.sendMessageString(CommonInfoCFConst.KEI_HUKA_KAITORI_CD_16, X31CWebConst.DATABEAN_GET_VALUE);
		// モデムプラン
		String modem_plan = bnEonet.sendMessageString(CommonInfoCFConst.MODEM_PLAN_11, X31CWebConst.DATABEAN_GET_VALUE);
		// 料金コース
		String net_course = bnEonet.sendMessageString(CommonInfoCFConst.NET_COURSE_11, X31CWebConst.DATABEAN_GET_VALUE);
		// 回線場所選択
		String kaisen_select = bnElseinfo.sendMessageString(CommonInfoCFConst.KAISEN_SELECT_18, X31CWebConst.DATABEAN_GET_VALUE);

		
		//●対象判定(以下を全て満たすこと)
		boolean chkFlg = false; // 初期値
		//・マンション申し込みであること
		if (JFUStrConst.MSKM_KSN_SVC_MANSION.equals(mskm_ksn_svc)
				&& JFUStrConst.MSKM_MNS_TYPE_MANSION.equals(mskm_mns_type))
		{
			//・ネットか電話の申し込みであること
			if (SENTAKU.equals(sle_svc_net) || SENTAKU.equals(sle_svc_tel))
			{
				chkFlg = true;
			}
		}
		
		if (!chkFlg)
		{
			// 対象外なので処理終了
			return ret;
		}

		// 初期設定（レンタル）
		ret = kei_huka_rent_cd;
		
		//●VDSLの場合
		if (JFUStrConst.TK_HOSHIKI_PTN_VDSL.equals(teikyo_hoshiki_ptn_cd)
				|| JFUStrConst.TK_HOSHIKI_PTN_VDSLS.equals(teikyo_hoshiki_ptn_cd))
		{
			
			// モデム買取プランの場合
			if (JFUStrConst.MODEM_PLAN_KAITORI.equals(modem_plan))
			{
				// 契約付加(買取)の情報を設定
				ret = kei_huka_kaitori_cd;
			}
			else
			{
				// モデムプラン設定なし（ネット申し込み伴わない）の時
				// 既に保持しているモデムが何か
				// →買取の場合、買取を設定
				String kktkSbtCd = getkktkSbtCd(bl);
				// 未設定の時、サービス追加の場合は、返却値は未設定にする
				// (サービス追加でない場合は、新規申込の為、レンタル値を返却）
				if (JFUWebCommon.isNull(kktkSbtCd))
				{
					// サービス追加の場合に値をセット
					if (JFUStrConst.KAISEN_SELECT_ADD_KEI.equals(kaisen_select))
					{
						// 未設定値
						ret = JFUStrConst.EMPTY;
					}
				}
				else if (JFUStrConst.CD00212_01.equals(kktkSbtCd))
				{
					ret = kei_huka_kaitori_cd;
				}
			}
		}
		
		//●イーサ・光配線の場合
		// 光コンセント、ＭＡＮＭＯＳ管理物件の料金コースは光配線1ギガ（速度は1G、5G、10G）
		else if (JFUStrConst.TK_HOSHIKI_PTN_ENET.equals(teikyo_hoshiki_ptn_cd)
				|| JFUStrConst.TK_HOSHIKI_PTN_GG_ENET.equals(teikyo_hoshiki_ptn_cd)
				|| JFUStrConst.TK_HOSHIKI_PTN_HIKARI_HAISEN.equals(teikyo_hoshiki_ptn_cd))
		{
			if (JFUStrConst.NET_COURSE_1G.equals(net_course))
			{
				// １ギガ申し込みありの場合、契約付加(買取)コードの情報を設定
				ret = kei_huka_kaitori_cd;
			}
			
			// ネット申し込み伴わない場合は、レンタル（デフォルト）
		}

		return ret;
	}

	/**
	 * 機器提供種別コード取得
	 *
	 * @param bl ビューロジックへの参照
	 * @return 機器提供種別コード
	 */
	@SuppressWarnings("unchecked")
	private static String getkktkSbtCd(X31BWebBusinessLogic bl) 
	{
		String ret = JFUStrConst.EMPTY;
		
		//●共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = bl.getCommonInfoBean();
		// WEB新規情報
		X31SDataBeanAccess bnWebinfo = getWebInfo(commonInfoBean);
		// 回線機器情報リスト
		X31SDataBeanAccessArray kaisenKikiArray = bnWebinfo.getDataBeanArray(CommonInfoCFConst.KAISEN_KIKI_INFO);

		HashMap rentMap = new HashMap();
		HashMap buyMap = new HashMap();
		
		for (int i = 0; i < kaisenKikiArray.getCount(); i++)
		{
			X31SDataBeanAccess kaisenKikiBean = kaisenKikiArray.getDataBean(i);
			
			// ステータス取得
			String kktkSvcKeiStat = kaisenKikiBean.sendMessageString(CommonInfoCFConst.KKTK_SVC_KEI_STAT_60, X31CWebConst.DATABEAN_GET_VALUE);
			// 世代管理年月日
			String geneAddDtm = kaisenKikiBean.sendMessageString(CommonInfoCFConst.GENE_ADD_DTM_60, X31CWebConst.DATABEAN_GET_VALUE);
			// 機器提供サービスコード
			String kktkSvcCd = kaisenKikiBean.sendMessageString(CommonInfoCFConst.KKTK_SVC_CD_60, X31CWebConst.DATABEAN_GET_VALUE);
			// 機器提供種別コード
			String kktkSbtCd = kaisenKikiBean.sendMessageString(CommonInfoCFConst.KKTK_SBT_CD_60, X31CWebConst.DATABEAN_GET_VALUE);

			//●処理概要
			//・機器提供サービスコードが"C005"(モデム)以外は対象外
			//・ステータス"010"、"020"、"030"、"910"、"920"は対象外
			//・ステータス"100"優先
			//・ステータス"100"が複数ある場合、世代管理年月日の最大が優先
			//・ステータス"100"以外が複数ある場合、世代管理年月日の最大が優先
			
			if (!JFUStrConst.KK0771_KKTK_SVC_CD_C005.equals(kktkSvcCd))
			{
				// 次レコード参照
				continue;
			}
			
			if (MUKOU_KIKI_SVC_KEI_STAT_LIST.contains(kktkSvcKeiStat))
			{
				// 次レコード参照
				continue;
			}
			
			if (JFUStrConst.CD00212_02.equals(kktkSbtCd))
			{
				// 機器提供種別コードがレンタルの場合
				rentMap.put(geneAddDtm, kktkSbtCd);
			}
			else if (JFUStrConst.CD00212_01.equals(kktkSbtCd))
			{
				// 機器提供種別コードが買取の場合
				buyMap.put(geneAddDtm, kktkSbtCd);
			}
		}

		if ((rentMap != null && rentMap.size() > 0) && (buyMap == null || buyMap.size() == 0))
		{
			// レンタルのみの場合
			// 返却値にレンタル設定
			ret = JFUStrConst.CD00212_02;
		}
		else if ((buyMap != null && buyMap.size() > 0) && (rentMap == null || rentMap.size() == 0))
		{
			// 買取のみの場合
			// 返却値に買取設定
			ret = JFUStrConst.CD00212_01;
		}
		
		// 混在している場合、またはモデム保有なしの場合は、返却値は未設定のまま
		
		return ret;
	}
	
	/**
	 * WEB新規情報取得
	 * 
	 * @param bean 共有フォームBean
	 * @return bn WEB新規情報取得
	 */
	private static 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 WEB新規情報
	 * @return bn1 契約サービス情報
	 */
	private static X31SDataBeanAccess getKeiyakusvcinfo(X31SDataBeanAccess bn)
	{
		X31SDataBeanAccessArray arr = bn.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		if (arr.getCount() == 0)
		{
			arr.addDataBean();
		}
		X31SDataBeanAccess bn1 = arr.getDataBean(0);

		return bn1;
	}

	/**
	 * マンション情報取得
	 * 
	 * @param bn WEB新規情報
	 * @return bn1 マンション情報
	 */
	private static X31SDataBeanAccess getMansioninfo(X31SDataBeanAccess bn)
	{
		X31SDataBeanAccessArray arr = bn.getDataBeanArray(CommonInfoCFConst.MANSION_INFO);
		if (arr.getCount() == 0)
		{
			arr.addDataBean();
		}
		X31SDataBeanAccess bn1 = arr.getDataBean(0);

		return bn1;
	}
	
	/**
	 * 光ネット情報取得
	 * 
	 * @param bn WEB新規情報
	 * @return bn1 光ネット情報
	 */
	private static X31SDataBeanAccess getEonet(X31SDataBeanAccess bn)
	{
		X31SDataBeanAccessArray arr = bn.getDataBeanArray(CommonInfoCFConst.EONET);
		if (arr.getCount() == 0)
		{
			arr.addDataBean();
		}
		X31SDataBeanAccess bn1 = arr.getDataBean(0);

		return bn1;
	}
	
	/**
	 * 既契約サービス情報
	 * 
	 * @param bean 共有フォームBean
	 * @return bn WEB新規情報取得
	 */
	private static X31SDataBeanAccess getSaveKeiyakuInfo(X31SDataBeanAccess bean)
	{
		X31SDataBeanAccessArray arr = bean.getDataBeanArray(CommonInfoCFConst.KKEI_SVC_INFO);
		if (arr.getCount() == 0)
		{
			arr.addDataBean();
		}
		X31SDataBeanAccess bn = arr.getDataBean(0);

		return bn;
	}
	
	/**
	 * その他情報
	 * 
	 * @param bn  WEB新規情報
	 * @return bn1
	 */
	private static X31SDataBeanAccess getElseInfo(X31SDataBeanAccess bn)
	{
		X31SDataBeanAccessArray arr = bn.getDataBeanArray(CommonInfoCFConst.ELSE_INFO);
		if (arr.getCount() == 0)
		{
			arr.addDataBean();
		}
		X31SDataBeanAccess bn1 = arr.getDataBean(0);

		return bn1;
	}

}
