/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：同番移転可否確認(店頭販売支援)
 *   ソースファイル名：FUW00955SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2014年11月05日
 *＜機能概要＞
 *   同番移転可否確認(店頭販売支援)の画面制御を行います。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v12.00      2014/11/05   FJ）谷本    【ANK-2309-03-00】＜案件内仕変＞店頭販売支援へのメニュー画面追加
 **********************************************************************/

package eo.web.webview.FUW00955SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.HashMap;

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 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.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0206_FUSV0206OPDBMapper;

/**
 * 同番移転可否確認画面のVIEWロジックです。 <br>
 * 
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00955SFLogic extends JCCWebBusinessLogic
{
	// ----------------------------------------------------
	// 定数群
	// ----------------------------------------------------
	/** 定数参照ID チェック結果(記号) ○ */
	private final static String RESULT_MARK_MARU = "RESULT_MARK_MARU";
	/** 定数参照ID チェック結果(記号) × */
	private final static String RESULT_MARK_BATSU = "RESULT_MARK_BATSU";
	/** 定数参照ID チェック結果(記号) △ */
	private final static String RESULT_MARK_SANKAKU = "RESULT_MARK_SANKAKU";

	/** 定数参照ID チェック結果(文言) 可能 */
	private final static String RESULT_TEXT_TRUE = "RESULT_TEXT_TRUE";
	/** 定数参照ID チェック結果(文言) 不可 */
	private final static String RESULT_TEXT_FALSE = "RESULT_TEXT_FALSE";
	/** 定数参照ID チェック結果(文言) 区画 重複 */
	private final static String RESULT_TEXT_MA_OVER = "RESULT_TEXT_MA_OVER";
	/** 定数参照ID チェック結果(文言) 住所コード 重複 */
	private final static String RESULT_TEXT_AD_OVER = "RESULT_TEXT_AD_OVER";

	/** 定数参照ID 住所エラー */
	private static final String ADD_ERR = "ADD_ERR";
	/** エラー表示用定数 */
	private static final String ERR_CD_EKF0400_TW = "EKF0400-TW";
	/** 住所エラー出力箇所 */
	private static final String STATE_CITY = "state_city";

	/** ユースケースID */
	private final static String USECASE_ID = "FUSV0206";

	/** [画面間引き継ぎ情報Mapキー]住所検索：郵便番号(前) */
	private static final String MAP_KEY_PCD_1 = "pcd_1";
	/** [画面間引き継ぎ情報Mapキー]住所検索：郵便番号(後) */
	private static final String MAP_KEY_PCD_2 = "pcd_2";

	/** CCタイトル：住所情報分割CC */
	private static final String SC_TITLE_FUSV020601CC = "FUSV020601CC";
	/** CCタイトル：同番移転可能チェックCC */
	private static final String SC_TITLE_FUSV020603CC = "FUSV020603CC";

	/** Mapキー：検索エラーフラグ */
	private static final String MAP_KEY_KANI_CKRLT_1 = "kani_ckrlt_1";

	/**
	 * 初期表示処理
	 * 
	 * <br>
	 * 
	 * @return true
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		// デバッグ用ログ出力
		DEBUG_LOG.info("----- init_Start -----");

		// 共有フォームBean
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00955);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00955);

		DEBUG_LOG.info("----- init_End  -----");

		return true;
	}

	/**
	 * 住所検索ボタン押下処理 <br/>
	 * 
	 * @return 処理結果
	 */
	public boolean searchAdress()
	{
		// -------------------------------------------------
		// 使用フォームBeanの取得
		// -------------------------------------------------
		// 共有フォームBean
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// -------------------------------------------------
		// 画面間引き継ぎ情報の設定
		// -------------------------------------------------
		JFUWebCommon.setScreenInfo(this, JFUScreenConst.SCREEN_ID_FUW09902, this.createAdSearchDataMap("search_address"));

		// -------------------------------------------------
		// 遷移先画面ID、画面名の設定
		// -------------------------------------------------
		// 住所検索ポップアップ画面に遷移
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW09902);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW09902);

		return true;
	}

	/**
	 * 確認ボタン押下処理
	 * 
	 * <br>
	 * 
	 * @return ロジック正常終了時、true
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean confim() throws Exception
	{
		// デバッグ用ログ出力
		DEBUG_LOG.info("----- FUW00955_confim_Start -----");

		// 共有フォームBean
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// ユースケースID格納用マップを生成します。
		HashMap paramMap = new HashMap();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID);

		// マッパー引数用Bean配列
		X31SDataBeanAccess[] beans = { super.getServiceFormBean() };

		// マッパー作成・上りマッピング開始
		HashMap inputMap = new HashMap();
		FUSV0206_FUSV0206OPDBMapper mapper = new FUSV0206_FUSV0206OPDBMapper();
		mapper.setFUSV020601CC(beans, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV020602CC(beans, inputMap);
		mapper.setFUSV020603CC(beans, inputMap);

		// 結果格納用マップを生成します。
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();

		// サービスの実行
		try
		{
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 業務共通エラーをスロー
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002); // "0002"：システムエラー
		}

		// メッセージの設定
		setResultMessage(outputMap);

		// 遷移先画面ID、画面名の設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00955);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00955);

		// デバッグ用ログ出力
		DEBUG_LOG.info("----- FUW00955_confim_End -----");

		return true;
	}

	/**
	 * 住所検索画面引き継ぎ情報データマップ生成処理 本メニュー画面から住所検索ポップアップ画面に引き渡す情報を生成します。
	 * 
	 * @return dataMap 引き継ぎ情報データマップ
	 */
	private HashMap<String, Object> createAdSearchDataMap(String button_id)
	{
		// -------------------------------------------------
		// サービスフォームBeanの取得
		// -------------------------------------------------
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();

		// -------------------------------------------------
		// 画面間引き継ぎ情報の生成
		// -------------------------------------------------
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		String pcd1 = "";
		String pcd2 = "";

		// 郵便番号(前)
		pcd1 = serviceFormBean.sendMessageString(FUW00955SFConst.PCD_FRONT, X31CWebConst.DATABEAN_GET_VALUE);
		// 郵便番号(後)
		pcd2 = serviceFormBean.sendMessageString(FUW00955SFConst.PCD_BACK, X31CWebConst.DATABEAN_GET_VALUE);

		// 画面間引き継ぎ情報に格納
		dataMap.put(MAP_KEY_PCD_1, pcd1);
		dataMap.put(MAP_KEY_PCD_2, pcd2);

		return dataMap;
	}

	/**
	 * 結果メッセージの設定
	 * 
	 * @return
	 * @throws Exception
	 */
	private void setResultMessage(HashMap<String, HashMap<String, Object>> outputMap) throws Exception
	{
		// デバッグ用ログ出力
		DEBUG_LOG.info("----- FUW00955_setResultMessage_start -----");

		// 結果の値をクリア
		setResultMark(JFUStrConst.EMPTY);
		setResultText(JFUStrConst.EMPTY);

		// 住所情報分割CC
		HashMap<String, Object> parentMap = outputMap.get(SC_TITLE_FUSV020601CC);
		// 都道府県・市区町村は正しく入力してください。
		if (null != parentMap)
		{
			if (JFUWebCommon.isNull(parentMap.get("state_nm")) || JFUWebCommon.isNull(parentMap.get("city_nm")))
			{
				String mngn = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00955, ADD_ERR);

				// エラー表示(契約者_都道府県)
				JFUWebCommon.setMessageInfo(this, ERR_CD_EKF0400_TW, new String[] { mngn }, STATE_CITY);
				return;
			}
		}

		// 番ポ電話番号登録可否チェックCC
		HashMap<String, Object> parentMap2 = outputMap.get(SC_TITLE_FUSV020603CC);

		if (null != parentMap2)
		{
			// エラーチェック
			String errUm = (String)parentMap2.get(MAP_KEY_KANI_CKRLT_1);
			// 1:OKの場合
			if (JFUStrConst.CD01659_1.equals(errUm))
			{
				setResultMark(getDefinition(RESULT_MARK_MARU)); // "○"
				setResultText(getDefinition(RESULT_TEXT_TRUE));
			}
			// 2:NGの場合
			if (JFUStrConst.CD01659_2.equals(errUm))
			{
				setResultMark(getDefinition(RESULT_MARK_BATSU)); // "×"
				setResultText(getDefinition(RESULT_TEXT_FALSE));
			}
			// 3:審査不可の場合
			if (JFUStrConst.CD01659_3.equals(errUm))
			{
				setResultMark(getDefinition(RESULT_MARK_SANKAKU)); // "△"
				setResultText(getDefinition(RESULT_TEXT_AD_OVER));
			}
		}

		// デバッグ用ログ出力
		DEBUG_LOG.info("----- FUW00955_setResultMessage_End -----");
	}

	/**
	 * 設定ファイルから自画面IDの値を取得
	 * 
	 * @param id
	 *            取得する値のID
	 * @throws Exception
	 */
	private String getDefinition(String id) throws Exception
	{
		return JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00955, id);
	}

	/**
	 * 結果 文言を設定
	 */
	private void setResultText(String str)
	{
		setServiceFormValue(FUW00955SFConst.RESULT_TEXT, str);
	}

	/**
	 * 結果 記号を設定
	 */
	private void setResultMark(String str)
	{
		setServiceFormValue(FUW00955SFConst.RESULT_MARK, str);
	}

	/**
	 * サービスフォームBeanへの値の設定
	 */
	private void setServiceFormValue(String itemId, String value)
	{
		// サービスフォームBean取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		serviceFormBean.sendMessageString(itemId, X31CWebConst.DATABEAN_SET_VALUE, value);
	}
}
