/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：エリア検索
*   ソースファイル名：FUW00101SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年04月28日
*＜機能概要＞
*  エリア検索のビューロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/04/28   FJ）赤井    新規作成
*   v3.00.00    2012/03/05   FJ）楠山    変更依頼管理台帳No197 PASCO対応
*
**********************************************************************/
package eo.web.webview.FUW00101SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
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.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0140_FUSV0140OPDBMapper;

/**
 * エリア検索のビューロジッククラスです。<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00101SFLogic extends JCCWebBusinessLogic
{
	/** ユースケースID（FUSV0140） */
	private static final String USECASE_ID_FUSV0140 = "FUSV0140";

	/** [画面間引き継ぎ情報Mapキー]処理区分 */
	private static final String MAP_KEY_TRAN_KBN = "tran_kbn";
	/** [画面間引き継ぎ情報Mapキー]郵便番号 */
	private static final String MAP_KEY_PCD = "pcd";
	/** [画面間引き継ぎ情報Mapキー]都道府県 */
	private static final String MAP_KEY_STATE = "state";
	/** [画面間引き継ぎ情報Mapキー]市町村・字・丁目 */
	private static final String MAP_KEY_CITY_AZA_CHO = "city_aza_cho";

	/** ボタン制御(next1) */
	private static final String BTN_CTRL_1 = "1";

	/** ボタン制御(next2) */
	private static final String BTN_CTRL_2 = "2";

	/** ボタン制御(next3) */
	private static final String BTN_CTRL_3 = "3";

	/**
	 * 初期表示処理
	 * 
	 * @return 処理結果
	 */
	public boolean init()
	{

		// デバッグ用ログ出力
		DEBUG_LOG.info("----- init Start -----");

		// サービスフォームBean取得
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// コード種別をセット
		serviceInfoBean.sendMessageString(FUW00101SFConst.CODE_SBT, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD_SBT_CD00691);
		// 基準日をセット
		serviceInfoBean.sendMessageString(FUW00101SFConst.STDARDYMD, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getOpeDate(this, null));

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0140);

		// DataBean-BPマッピング
		FUSV0140_FUSV0140OPDBMapper mapper = new FUSV0140_FUSV0140OPDBMapper();

		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();

		X31SDataBeanAccess[] paramBean = { serviceInfoBean };

		// 機能コード「1」を設定
		mapper.setMskmUcwkMap(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);

		try
		{
			// サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// システムエラー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		X31SDataBeanAccess[] paramBeanOut = { serviceInfoBean };

		// サービスからの戻りデータをBeanにセット
		mapper.getMskmUcwkMap(paramBeanOut, outputMap);

		// 申込受付実績登録部品実行
		JFUWebCommon.executeWebMskmUkJskAdd(this);

		DEBUG_LOG.info("----- init  End  -----");

		return true;
	}

	/**
	 * 次へボタン押下時（郵便番号から検索）
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean next1() throws Exception
	{

		DEBUG_LOG.info("----- next1 Start -----");

		//連携用パラメータ用意
		X31SDataBeanAccess bean = getServiceFormBean();
		bean.sendMessageString(FUW00101SFConst.BTN_CTRL, X31CWebConst.DATABEAN_SET_VALUE, BTN_CTRL_1);
		bean.sendMessageString(FUW00101SFConst.SESSION_ID, X31CWebConst.DATABEAN_SET_VALUE, this.getSessionId());

		// 2012/3/5 楠山 PASCO連携パラメータ改修 START
		// -------------------------------------------------
		// 画面間引き継ぎ情報の設定
		// -------------------------------------------------
		JCCWebCommon.setScreenInfo(this, JFUScreenConst.SCREEN_ID_FUW00144, this.createSvcMskmRedirectDataMap(BTN_CTRL_1));
		// 2012/3/5 楠山 PASCO連携パラメータ改修 END

		//TODO PASCO連携までの暫定措置として、リダイレクト画面へ遷移することとする。
		// 次画面IDの設定
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		// 遷移先画面ＩＤ
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00144);
		// 遷移先画面名称
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00144);

		DEBUG_LOG.info("----- next1 End -----");

		return true;
	}

	/**
	 * 次へボタン押下時（住所から検索）
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean next2() throws Exception
	{

		DEBUG_LOG.info("----- next2 Start -----");

		// 連携用パラメータ用意
		X31SDataBeanAccess bean = getServiceFormBean();
		bean.sendMessageString(FUW00101SFConst.BTN_CTRL, X31CWebConst.DATABEAN_SET_VALUE, BTN_CTRL_2);
		bean.sendMessageString(FUW00101SFConst.SESSION_ID, X31CWebConst.DATABEAN_SET_VALUE, this.getSessionId());

		// 2012/3/5 楠山 PASCO連携パラメータ改修 START
		// -------------------------------------------------
		// 画面間引き継ぎ情報の設定
		// -------------------------------------------------
		JCCWebCommon.setScreenInfo(this, JFUScreenConst.SCREEN_ID_FUW00144, this.createSvcMskmRedirectDataMap(BTN_CTRL_2));
		// 2012/3/5 楠山 PASCO連携パラメータ改修 END

		// 次画面IDの設定
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		// 遷移先画面ＩＤ
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00144);
		// 遷移先画面名称
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00144);

		DEBUG_LOG.info("----- next2 End -----");

		return true;
	}

	/**
	 * サービス可能エリア検索ボタン押下時
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean next3() throws Exception
	{

		DEBUG_LOG.info("----- next3 Start -----");

		// 連携用パラメータ用意
		X31SDataBeanAccess bean = getServiceFormBean();
		bean.sendMessageString(FUW00101SFConst.BTN_CTRL, X31CWebConst.DATABEAN_SET_VALUE, BTN_CTRL_3);
		bean.sendMessageString(FUW00101SFConst.SESSION_ID, X31CWebConst.DATABEAN_SET_VALUE, this.getSessionId());

		// 2012/3/5 楠山 PASCO連携パラメータ改修 START
		// -------------------------------------------------
		// 画面間引き継ぎ情報の設定
		// -------------------------------------------------
		JCCWebCommon.setScreenInfo(this, JFUScreenConst.SCREEN_ID_FUW00144, this.createSvcMskmRedirectDataMap(BTN_CTRL_3));
		// 2012/3/5 楠山 PASCO連携パラメータ改修 END

		// 次画面IDの設定
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		// 遷移先画面ＩＤ
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00144);
		// 遷移先画面名称
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00144);

		DEBUG_LOG.info("----- next3 End -----");

		return true;
	}

	/**
	 * 戻るボタン押下時
	 * 
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean back() throws Exception
	{

		DEBUG_LOG.info("----- back Start -----");

		// 次画面IDの設定
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// ●WEB新規情報を取得
		X31SDataBeanAccessArray beanArray = commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess subbean = beanArray.getDataBean(0);

		// 引継情報の作成
		// 画面遷移モード
		subbean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.SCREEN_MODE_DEF);
		// 遷移先画面ＩＤ
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00109);
		// 遷移先画面名称
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00109);

		DEBUG_LOG.info("----- back End -----");

		return true;
	}

	/**
	 * PASCO引き継ぎ情報データマップ生成処理
	 * 本メニュー画面からサービス申込リダイレクトに引き渡す情報を生成します。
	 * @param button_id     ボタンＩＤ
	 * @return dataMap 引き継ぎ情報データマップ
	 */
	private HashMap<String, Object> createSvcMskmRedirectDataMap(String button_id)
	{
		// -------------------------------------------------
		// 使用フォームBeanの取得
		// -------------------------------------------------
		// エリア検索サービスフォームBean
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();

		// WEB新規情報を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		X31SDataBeanAccessArray beanArray = commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess subbean = beanArray.getDataBean(0);
		// PASCO情報を取得
		X31SDataBeanAccess pascoInfo = subbean.getDataBeanArray(CommonInfoCFConst.PASCO_INFO).getDataBean(0);

		// -------------------------------------------------
		// 画面間引き継ぎ情報の生成
		// -------------------------------------------------
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		String pcd = "";
		String state = "";
		String city_aza_cho = "";
		String hanbai_type = JFUStrConst.EMPTY;
		int prefecture_select = 0;

		if (BTN_CTRL_1.equals(button_id))
		{
			// 検索条件(画面入力値)を取得
			// 郵便番号
			pcd =
					serviceFormBean.sendMessageString(FUW00101SFConst.PCD1, X31CWebConst.DATABEAN_GET_VALUE)
							+ serviceFormBean.sendMessageString(FUW00101SFConst.PCD2, X31CWebConst.DATABEAN_GET_VALUE);

			// 販売タイプを取得
			hanbai_type = subbean.sendMessageString(CommonInfoCFConst.HANBAI_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE);

			// 販売タイプが提携住宅会社の場合
			if(JFUStrConst.HNBAI_TYPE_TKJCOMP.equals(hanbai_type))
			{
				// 共有フォームビーンに郵便番号の値を設定
				pascoInfo.sendMessageString(CommonInfoCFConst.PCD_07, X31CWebConst.DATABEAN_SET_VALUE, pcd);
			}

			// 都道府県
			state = null;
			// 市町村・字・丁目
			city_aza_cho = null;
		}
		else if (BTN_CTRL_2.equals(button_id))
		{
			// 検索条件(画面入力値)を取得
			// 郵便番号
			pcd = null;
			// 都道府県
			prefecture_select =
					Integer.valueOf(serviceFormBean.getDataBeanArray(FUW00101SFConst.PREFECTURE_LIST).getDataBean(0).sendMessageString(
							FUW00101SFConst.PREFECTURE_SELECT_01, X31CWebConst.DATABEAN_GET_VALUE));
			state =
					serviceFormBean.getDataBeanArray(FUW00101SFConst.PREFECTURE_LIST).getDataBean(0).sendMessageString(
							FUW00101SFConst.PREFECTURE_NAME_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, prefecture_select);
			// 市町村・字・丁目
			city_aza_cho = serviceFormBean.sendMessageString(FUW00101SFConst.CITY_AZA_CHO, X31CWebConst.DATABEAN_GET_VALUE);

		}
		else if (BTN_CTRL_3.equals(button_id))
		{
			// 検索条件(画面入力値)を取得
			// 郵便番号
			pcd = null;
			// 都道府県
			state = null;
			// 市町村・字・丁目
			city_aza_cho = null;
		}

		// 画面間引き継ぎ情報に格納
		dataMap.put(MAP_KEY_TRAN_KBN, button_id);
		dataMap.put(MAP_KEY_PCD, pcd);
		dataMap.put(MAP_KEY_STATE, state);
		dataMap.put(MAP_KEY_CITY_AZA_CHO, city_aza_cho);

		return dataMap;
	}
}
