/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：FUW00143SFLogic
*   ソースファイル名：FUW00143SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年06月17日
*＜機能概要＞
*   申込完了画面のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/11/14   FJ）楠山    新規作成
*
**********************************************************************/
package eo.web.webview.FUW00143SF;

import java.util.Map;

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.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * 低価格マンション料金確認 （確認完了）画面(FUW00143)のビューロジック
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00143SFLogic extends JCCWebBusinessLogic
{

	/** プロパティパス */
	private static final String QUERY_PATH = "DISPSETTING/SETTING[@screenId='FUW00117']/DISPTEXT[@groupid='SERVICE_NAME']";
	/** 属性名 */
	private static final String QUERY_ATTR_NAME = "id";

	/** タイプ名：ホームタイプ */
	private static final String NET_TIPE_MANSHON = "NET_TIPE_MANSHON";
	/** コース名：結合文字列(ネット) */
	private static final String NET_COURSE = "NET_COURSE_";
	/** コース名：結合文字列(電話) */
	private static final String TEL_COURSE = "TEL_";
	/** コース名：結合文字列(テレビ) */
	private static final String TV_COURSE = "TV_";
	/** コース名：結合文字列(テレビ) */
	private static final String MOBILE_COURSE = "MOBILE_";

	/**
	 * サービスフォームBeanの初期化処理を行います。
	 * <br>
	 * @return true固定
	 * @exception Exception
	 */
	public boolean init() throws Exception
	{

		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// サービスフォームBean取得
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// ＷＥＢ新規情報取得
		X31SDataBeanAccess webNewInfoBean = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.WEB_NEW_INFO);

		// 契約サービス情報取得
		X31SDataBeanAccess keiyakuSvcInfoBean = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.KEIYAKU_SVC_INFO);

		// eo光ネット取得
		X31SDataBeanAccess eonetBean = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.EONET);

		// eo光電話取得
		X31SDataBeanAccess eotelBean = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.EOTEL);

		// eo光テレビ取得
		X31SDataBeanAccess eotvBean = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.EOTV);

		// eoモバイル取得
		X31SDataBeanAccess eomobileBean = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.EOMOBILE);

		// サービス名リスト
		X31SDataBeanAccessArray beanArray = serviceInfoBean.getDataBeanArray(FUW00143SFConst.SERVICE_LIST);

		// サービス名称取得
		Map<String, String> servicenameMap = JFUWebCommon.getDispItemsAsMap(QUERY_PATH, QUERY_ATTR_NAME);

		// 選択サービス（ネット）が"1"(選択中)の場合
		if (!isNullBean(keiyakuSvcInfoBean)
				&& JFUStrConst.SELECT_SVC_NET_CHOICE.equals(keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10,
						X31CWebConst.DATABEAN_GET_VALUE)))
		{
			String serviceNameTypeKey = null;
			String serviceNameCoseKey = null;

			if (JFUStrConst.MSKM_KSN_SVC_MANSION.equals(webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_KSN_SVC_06,
					X31CWebConst.DATABEAN_GET_VALUE)))
			{
				// eo光ネットタイプ：マンション判定
				if (!isNullBean(eonetBean)
						&& JFUStrConst.MSKM_MNS_TYPE_MANSION.equals(webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_MNS_TYPE_06,
								X31CWebConst.DATABEAN_GET_VALUE)))
				{
					serviceNameTypeKey = NET_TIPE_MANSHON;
					serviceNameCoseKey = NET_COURSE + eonetBean.sendMessageString(CommonInfoCFConst.NET_COURSE_11, X31CWebConst.DATABEAN_GET_VALUE);
				}
			}

			// 申込みサービス名・申込番号セット
			if (!isNullOrEmpty(serviceNameTypeKey) && !isNullOrEmpty(serviceNameCoseKey))
			{

				String serviceNameNet = null;

				if (!isNullOrEmpty((String)servicenameMap.get(serviceNameTypeKey)))
				{
					serviceNameNet = (String)servicenameMap.get(serviceNameTypeKey);
				}

				if (!isNullOrEmpty((String)servicenameMap.get(serviceNameCoseKey)))
				{
					serviceNameNet = serviceNameNet + (String)servicenameMap.get(serviceNameCoseKey);
				}

				// 申込番号取得
				String uketsuke = eonetBean.sendMessageString(CommonInfoCFConst.MSKMSHO_NO_11, X31CWebConst.DATABEAN_GET_VALUE);

				// 申込みサービス名・申込番号セット
				setService(beanArray, serviceNameNet, uketsuke);

			}

		}

		// 選択サービス（電話）が"1"(選択中)の場合
		if (!isNullBean(eotelBean)
				&& JFUStrConst.SELECT_SVC_CHOICE.equals(keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_TEL_10,
						X31CWebConst.DATABEAN_GET_VALUE)))
		{
			String serviceNameKey = TEL_COURSE + webNewInfoBean.sendMessageString(CommonInfoCFConst.TEL_COURSE_06, X31CWebConst.DATABEAN_GET_VALUE);

			String serviceNameTel = (String)servicenameMap.get(serviceNameKey);

			// 申込番号取得
			String uketsuke = eotelBean.sendMessageString(CommonInfoCFConst.MSKMSHO_NO_12, X31CWebConst.DATABEAN_GET_VALUE);

			// 申込みサービス名・申込番号セット
			setService(beanArray, serviceNameTel, uketsuke);
		}

		// 選択サービス（テレビ）が"1"(選択中)の場合
		if (!isNullBean(eotvBean)
				&& JFUStrConst.SELECT_SVC_TV_CHOICE.equals(keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_TV_10,
						X31CWebConst.DATABEAN_GET_VALUE)))
		{
			String serviceNameKey = TV_COURSE + eotvBean.sendMessageString(CommonInfoCFConst.TV_COURSE_13, X31CWebConst.DATABEAN_GET_VALUE);

			String serviceNameTv = (String)servicenameMap.get(serviceNameKey);

			// 申込番号取得
			String uketsuke = eotvBean.sendMessageString(CommonInfoCFConst.MSKMSHO_NO_13, X31CWebConst.DATABEAN_GET_VALUE);

			// 申込みサービス名・申込番号セット
			setService(beanArray, serviceNameTv, uketsuke);
		}

		// モバイル判定
		if (!isNullBean(eomobileBean)
				&& !isNullOrEmpty(eomobileBean.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_GET_VALUE)))
		{

			if (!JFUStrConst.MOBILE_COURSE_NON.equals(eomobileBean.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14,
					X31CWebConst.DATABEAN_GET_VALUE)))
			{
				String serviceNameKey =
						MOBILE_COURSE + eomobileBean.sendMessageString(CommonInfoCFConst.MOBILE_COURSE_14, X31CWebConst.DATABEAN_GET_VALUE);
				// 申込みサービス名取得
				String serviceNameMobile = (String)servicenameMap.get(serviceNameKey);

				// 申込番号取得
				String uketsuke = eomobileBean.sendMessageString(CommonInfoCFConst.MSKMSHO_NO_14, X31CWebConst.DATABEAN_GET_VALUE);

				// 申込みサービス名・申込番号セット
				setService(beanArray, serviceNameMobile, uketsuke);

			}
		}

		// 申込受付実績登録部品実行
		JFUWebCommon.executeWebMskmUkJskAdd(this);
		
		return true;

	}

	/**
	 * 「続けてオプションを申し込む」ボタン押下処理
	 * @return true固定
	 * @throws Exception
	 */
	public boolean next() throws Exception
	{

		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// ＷＥＢ新規情報取得
		X31SDataBeanAccess webNewInfoBean = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.WEB_NEW_INFO);

		// 契約サービス情報取得
		X31SDataBeanAccess keiyakuSvcInfoBean = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.KEIYAKU_SVC_INFO);

		// 画面遷移モードに"0"(通常遷移)を設定する。
		webNewInfoBean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.SCREEN_MODE_DEF);

		// eo光テレビ取得
		X31SDataBeanAccess eotvBean = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.EOTV);

		// 遷移先の画面ID・画面名を判定する。
		// 選択サービス（ネット）が"1"(選択中)の場合
		if (JFUStrConst.SELECT_SVC_CHOICE.equals(keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10,
				X31CWebConst.DATABEAN_GET_VALUE)))
		{
			// 遷移先の画面ID・画面名に"eo光ネットオプション選択"画面を設定する。
			setScreenInfo(JFUScreenConst.SCREEN_ID_FUW00118, JFUScreenConst.SCREEN_NAME_FUW00118);
		}
		else
		// 契約サービス情報.選択サービス（ネット）が"1"(選択)の場合
		if (JFUStrConst.SELECT_SVC_CHOICE.equals(keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_TEL_10,
				X31CWebConst.DATABEAN_GET_VALUE)))
		{

			// かつ、電話コースが"1"(1番号サービス) かつ eo光電話[0].番ポ利用有無が"1"(利用する) または
			// 電話コースが"2"(2番号サービス) かつ eo光電話[1].番ポ利用有無が"1"(利用する)の場合
			if (JFUStrConst.TEL_COURSE_1BANGOU_SVC.equals(webNewInfoBean.sendMessageString(CommonInfoCFConst.TEL_COURSE_06,
					X31CWebConst.DATABEAN_GET_VALUE))
					&& JFUStrConst.USE_BMP_USE.equals(getUseBmp(webNewInfoBean, 0))
					|| JFUStrConst.TEL_COURSE_2BANGOU_SVC.equals(webNewInfoBean.sendMessageString(CommonInfoCFConst.TEL_COURSE_06,
							X31CWebConst.DATABEAN_GET_VALUE)) && JFUStrConst.USE_BMP_USE.equals(getUseBmp(webNewInfoBean, 1)))
			{
				// 遷移先の画面ID・画面名に"番号ポータビリティ情報入力"画面を設定する。
				setScreenInfo(JFUScreenConst.SCREEN_ID_FUW00113, JFUScreenConst.SCREEN_NAME_FUW00113);
			}
			else
			{
				// 遷移先の画面ID・画面名に"eo光電話オプション選択"画面を設定する。
				setScreenInfo(JFUScreenConst.SCREEN_ID_FUW00119, JFUScreenConst.SCREEN_NAME_FUW00119);
			}
		}
		else
		// 選択サービス（テレビ）が"1"(選択中)の場合（ネット、電話なしのため、テレビ単独の場合となる）かつ、
		// eo光テレビ.テレビコースが"1"(K-CAT)かつ、eo光テレビ.テレビコース（eo光テレビ）が"2"(ベーシックプレミアム)の場合
		if (JFUStrConst.SELECT_SVC_CHOICE.equals(keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_TV_10,
				X31CWebConst.DATABEAN_GET_VALUE))
				&& JFUStrConst.TV_COURSE_KCAT.equals(eotvBean.sendMessageString(CommonInfoCFConst.TV_COURSE_13, X31CWebConst.DATABEAN_GET_VALUE))
				&& JFUStrConst.EO_TV_COURSE_BASIC.equals(eotvBean.sendMessageString(CommonInfoCFConst.EO_TV_COURSE_13,
						X31CWebConst.DATABEAN_GET_VALUE)))
		{

			setScreenInfo(JFUScreenConst.SCREEN_ID_FUW00120, JFUScreenConst.SCREEN_NAME_FUW00120);

		}
		else
		{

			setScreenInfo(JFUScreenConst.SCREEN_ID_FUW00115, JFUScreenConst.SCREEN_NAME_FUW00115);

		}

		return true;

	}

	/**
	 * 申込みサービス名と申込番号を設定する。
	 * <br>
	 * @param beanArray   データbean
	 * @param serviceName 申込みサービス名
	 * @param uketsuke    申込番号
	 * @throws Exception
	 */
	private void setService(X31SDataBeanAccessArray beanArray, String serviceName, String uketsuke) throws Exception
	{

		// サービス名リスト
		X31SDataBeanAccess subbean = beanArray.addDataBean();

		// 申込みサービス名と申込番号を設定する。
		subbean.sendMessageString(FUW00143SFConst.SERVICE_01, X31CWebConst.DATABEAN_SET_VALUE, serviceName);
		subbean.sendMessageString(FUW00143SFConst.UKETSUKE_01, X31CWebConst.DATABEAN_SET_VALUE, uketsuke);

	}

	/**
	 * 遷移先の画面ID・画面名を共有フォームBeanの項目に設定する。
	 * <br>
	 * @param screenId   画面ＩＤ
	 * @param screenName 画面名
	 * @throws Exception
	 */
	private void setScreenInfo(String screenId, String screenName) throws Exception
	{

		// 共有フォームBean取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, screenId);

		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, screenName);

	}

	/**
	 * 番ポ利用有無を取得する。
	 * <br>
	 * @param bean  データbean
	 * @param count カウンタ
	 * @return 番ポ利用有無
	 * @throws Exception
	 */
	private String getUseBmp(X31SDataBeanAccess bean, int count) throws Exception
	{

		X31SDataBeanAccessArray eotel = bean.getDataBeanArray(CommonInfoCFConst.EOTEL);

		// 
		if (eotel.getCount() <= count)
		{
			return "";
		}

		X31SDataBeanAccess eotelBean = eotel.getDataBean(count);

		return eotelBean.sendMessageString(CommonInfoCFConst.USE_BMP_12, X31CWebConst.DATABEAN_GET_VALUE);

	}

	/**
	 * Null又は空文字かどうかを判定する。 <BR>
	 * 
	 * @param value
	 * @return （true:null、または空文字、false:null、または空文字以外）
	 */
	private boolean isNullOrEmpty(String value)
	{
		return null == value || "".equals(value) || "null".equals(value);
	}

	/**
	 * Beanがnullかどうかを判定する。 <BR>
	 * 
	 * @param value
	 * @return （true:null、false:null以外）
	 */
	private boolean isNullBean(X31SDataBeanAccess value)
	{
		return null == value;
	}

}