/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JFU4KStbAddSbKkChk
 *   ソースファイル名：JFU4KStbAddSbKkChk.java
 *   作成者          ：富士通
 *   日付            ：2018年08月29日
 *＜機能概要＞
 *   4K-STB登録時設備機器チェック部品です。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v39.00.00   2018/08/29   FJ）美濃原    【ANK-3488-00-00】４KSTB（ACASチップ）導入対応
 *   
**********************************************************************/
package eo.web.webview.common;

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.X31BWebBusinessLogic;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31SWebLog;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;

/**
 * 4K-STB登録時設備機器チェック部品です。
 * <br>
 * @author 富士通
 */
public class JFU4KStbAddSbKkChk
{

	/**  4K-STB登録時設備機器チェック部品マップキー名（JKK4KStbAddSbKkChkCC.fourKStbAddSbKkChkMain） */
	private static final String CC_TITLE_FUSV032301 = "FUSV032301CC";

	/** サービスID */
	private static final String SVC_ID_FUSV0323 = "FUSV0323";

	/** 機能コード */
	private static final String FUNC_CODE = "func_code";

	// // 共有フォームBean.ＷＥＢ新規情報
	/** 申込回線サービス：1（ホームタイプ） */
	private static final String MSKM_KSN_SVC_HOME = "1";
	/** 申込マンションタイプ：2（メゾン）  */
	private static final String MSKM_KSN_SVC_MEZON = "2";

	// 戻り値
	/** OUTPUT：チェック結果 */
	private static final String CHK_RESULT = "chk_result";
	/** "1"：4KSTB登録可能 */
	private static final String RETURN_ADD_OK = "1";
	/** "0"：4KSTB登録不可 */
	private static final String RETURN_ADD_NG = "0";

	/**
	/**
	 * 4K-STB登録時設備機器チェック処理を行います。
	 * 
	 * <br>
	 * @param bl 実行中のVIEWロジックインスタンス
	 * @param key_tk_hoshiki_kei_no ＫＥＹ＿提供方式契約番号（テレビ：マンションの場合セット）
	 * @param key_taknkiki_model_cd_vonu ＫＥＹ＿宅内機器型式コード＿ＶＯＮＵ（テレビ：ホーム、メゾンの場合セット）
	 * @param modeAdd 新規申込判定フラグ true：web新規系（コンシューマ（追加を含む）、量販訪販）、false：web変更系
	 * @return 戻り値 "1"：4KSTB登録可能、"0"：4KSTB登録不可
	 */
	public String vOnu4KStbChk(X31BWebBusinessLogic bl, String key_tk_hoshiki_kei_no, String key_taknkiki_model_cd_vonu, boolean modeAdd)
	{
		X31SWebLog.DEBUG_LOG.debug("■■■■■☆☆☆4K-STB登録時設備機器チェック処理実行開始！☆☆☆■■■■■");
		String rtn = RETURN_ADD_NG;

		try
		{
			if (modeAdd)
			{
				// web新規系
				X31SDataBeanAccess commonInfoBean = bl.getCommonInfoBean();
				// 共有フォームBean.ＷＥＢ新規情報
				X31SDataBeanAccessArray webNewInfoBeanArray = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
				if (webNewInfoBeanArray != null)
				{
					X31SDataBeanAccess webNewInfoBean = webNewInfoBeanArray.getDataBean(JFUStrConst.I_ZERO);
					// 共有フォームBean.ＷＥＢ新規情報.申込回線サービス
					String mskmKsnSvc = webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_KSN_SVC_06, X31CWebConst.DATABEAN_GET_VALUE);
					// 共有フォームBean.ＷＥＢ新規情報.申込マンションタイプ
					String mskmMsnType = webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_MNS_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE);
					if (MSKM_KSN_SVC_HOME.equals(mskmKsnSvc) || MSKM_KSN_SVC_MEZON.equals(mskmMsnType))
					{
						return RETURN_ADD_OK;
					}
				}
			}

			if (isNullOrEmpty(key_tk_hoshiki_kei_no) && isNullOrEmpty(key_taknkiki_model_cd_vonu))
			{
				X31SWebLog.DEBUG_LOG.debug("■■■■■☆☆☆4K-STB登録時設備機器チェック（パラメータ無しのため登録不可と判定）☆☆☆■■■■■");
			}
			else
			{
				rtn = callService(bl, key_tk_hoshiki_kei_no, key_taknkiki_model_cd_vonu);
			}
			X31SWebLog.DEBUG_LOG.debug("■■■■■☆☆☆4K-STB登録時設備機器チェック処理実行終了！☆☆☆■■■■■");

		}
		catch (JCCWebServiceException jwse)
		{
			// 上記以外はシステムエラー
			X31SWebLog.DEBUG_LOG.debug("4K-STB登録時設備機器チェック【システムエラー】");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
		return rtn;
	}

	/**
	 * 4K-STB登録時設備機器チェック処理を行います。
	 * サービス層にて、サービス判定チェックを行います。
	 * <br>
	 * @param bl 実行中のVIEWロジックインスタンス
	 * @param key_tk_hoshiki_kei_no ＫＥＹ＿提供方式契約番号（テレビ：マンションの場合セット）
	 * @param key_taknkiki_model_cd_vonu ＫＥＹ＿宅内機器型式コード＿ＶＯＮＵ（テレビ：ホーム、メゾンの場合セット）
	 * @param 戻り値
	 */
	@SuppressWarnings("unchecked")
	private String callService(X31BWebBusinessLogic bl, String key_tk_hoshiki_kei_no, String key_taknkiki_model_cd_vonu)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 機能コード
		parentMap.put(FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		// ■ＫＥＹ＿提供方式契約番号
		parentMap.put("key_tk_hoshiki_kei_no", key_tk_hoshiki_kei_no);
		// ■ＫＥＹ＿宅内機器型式コード＿ＶＯＮＵ
		parentMap.put("key_taknkiki_model_cd_vonu", key_taknkiki_model_cd_vonu);

		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<Object, Object> outputMap = new HashMap<Object, Object>();

		inputMap.put(CC_TITLE_FUSV032301, parentMap);

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_ID_FUSV0323);

		// サービス呼び出し
		bl.invokeService(paramMap, inputMap, outputMap);

		if (outputMap != null)
		{
			// OK:1、NG:0
			HashMap<Object, Object> rtnMap = (HashMap<Object, Object>)outputMap.get(CC_TITLE_FUSV032301);
			String result = (String)rtnMap.get(CHK_RESULT);
			return JFUWebCommon.nvl(result, JFUStrConst.EMPTY);
		}
		return RETURN_ADD_NG;
	}

	/**
	 * 値が設定されているか判定を行います。
	 * @param value 判定値
	 * @return true:未設定、false:設定
	 */
	private boolean isNullOrEmpty(String value)
	{
		if (value == null || JFUStrConst.EMPTY.equals(value))
		{
			return true;
		}
		return false;
	}

}
