/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：FUW00966SFLogic
 *   ソースファイル名：FUW00966SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2021年04月27日
 *＜機能概要＞
 *   ID登録情報照会ログインリダイレクトのビューロジッククラスです。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v53.00      2021/04/27   FJ)大島     新規作成
 *
**********************************************************************/
package eo.web.webview.FUW00966SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CHashMap;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SWebLog;
import com.fujitsu.futurity.web.x33.X33CUtil;
import com.fujitsu.futurity.web.x33.X33WSessionController;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JFUCommonUtil;
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.common.JFUGetTnmtType;
import eo.web.webview.mapping.FUSV0347_FUSV0347OPDBMapper;

/**
 * ID登録情報照会ログインリダイレクトのビューロジッククラスです。
 * <p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00966SFLogic extends JCCWebBusinessLogic
{

	/** インターフェイス項目名:識別キー */
	private static final String POST_ID_KEY = "skbt_key";

	/** iDaリダイレクト用取得キー */
	private static final String IDA_EOID_REGIST_URL = "IDA_EOID_REGIST_URL";

//	/** iDaリダイレクト用URL */
//	private static final String IDA_REDIRECT_URL = JFUWebCommon.getApplicationConst(IDA_EOID_REGIST_URL);

	/** ユースケースID　FUSV0347 */
	private static final String USECASE_ID_347 = "FUSV0347";
	/** FUSV034701SC */
	private static final String FUSV034701SC = "FUSV034701SC";
	/** FUSV034702SC */
	private static final String FUSV034702SC = "FUSV034702SC";
	/** FUSV034703SC */
	private static final String FUSV034703SC = "FUSV034703SC";
	/** WEB申込情報一覧照会明細 */
	private static final String EFU0361B010CBSMSG1LIST = "EFU0361B010CBSMsg1List";
	/** 申込一意照会明細 */
	private static final String EKK0011A501CBSMSG1LIST = "EKK0011A501CBSMsg1List";
	/** サービス契約一覧照会（SYSID）明細 */
	private static final String EKK0081B002CBSMSG1LIST = "EKK0081B002CBSMsg1List";

	/** eoID */
	private static final String EOID = "eoid";
	/** ソーシャルID */
	private static final String SOCIAL_ID = "social_id";
	/** ワンタイムキー認証フラグ */
	private static final String ONET_KEY_NINSHO_FLG = "onet_key_ninsho_flg";
	/** ワンタイムキー送信日時 */
	private static final String ONET_KEY_SEND_TIME = "onet_key_send_time";
	/** サービス契約ステータス */
	private static final String SVC_KEI_STAT = "svc_kei_stat";

	/** ワンタイムキー有効時間 */
	private static final String ONETIMEKEY_YUKOU_TIME = "DISPSETTING/SETTING[@screenId='FUW00966']/DISPTEXT[@id='ONETIMEKEY_YUKOU_TIME']";

	/**
	 * 初期処理
	 * 
	 * @return 処理結果
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean init() throws Exception
	{
		DEBUG_LOG.info("----- FUW00966 Start init -----");
		// -------------------------------------------------
		// ■使用フォームBeanの取得
		// -------------------------------------------------
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		X31CHashMap posted_requests = null;

		// ■POSTされてきたパラメータを取得します
		posted_requests = this.getRequestParams();

		Object tmp_obj = null;
		String skb_key = null;

		// 識別キー取得
		tmp_obj = posted_requests.get(POST_ID_KEY);
		skb_key = (tmp_obj == null) ? (JFUStrConst.EMPTY) : (tmp_obj.toString().trim());
		if (JFUStrConst.EMPTY.equals(skb_key))
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0151);
		}
		
		// サービス呼び出し
		// ユースケースID格納用マップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_347);

		// マッピングクラスのインスタンスを生成
		FUSV0347_FUSV0347OPDBMapper mapper = new FUSV0347_FUSV0347OPDBMapper();
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// 上がりマッピング処理
		mapper.setFUSV034701SC(skb_key, dataMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV034702SC(skb_key, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV034703SC(dataMap, JPCModelConstant.FUNC_CD_2);

		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービス呼び出し
		try
		{
			invokeService(paramMap, dataMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}
		
		HashMap parentMap = null;
		if (outputMap.containsKey(FUSV034701SC))
		{
			parentMap = (HashMap)outputMap.get(FUSV034701SC);
		}
		// WEB申込情報取得
		if (parentMap != null && parentMap.size() > 0 && parentMap.containsKey(EFU0361B010CBSMSG1LIST))
		{
			ArrayList childList = (ArrayList)parentMap.get(EFU0361B010CBSMSG1LIST);
			if(childList == null || childList.size() == 0)
			{
				// 結果が存在しない場合
				X31SWebLog.DEBUG_LOG.debug("WEB申込情報データ無し");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0152);
			}

			// 検索結果の0番目を取得
			HashMap childMap = (HashMap)childList.get(0);
			if(childMap == null || childMap.size() == 0)
			{
				// 結果が存在しない場合
				X31SWebLog.DEBUG_LOG.debug("WEB申込情報データ無し");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0152);
			}

			String eoid = getValue(childMap, EOID);
			String social_id = getValue(childMap, SOCIAL_ID);
			String onet_key_ninsho_flg = getValue(childMap, ONET_KEY_NINSHO_FLG);
			String onet_key_send_time = getValue(childMap, ONET_KEY_SEND_TIME);
			
			if (!JFUWebCommon.isNull(eoid) || !JFUWebCommon.isNull(social_id))
			{
				// eoIDまたはソーシャルID設定済の場合はエラー
				X31SWebLog.DEBUG_LOG.debug("eoIDまたはソーシャルID設定済エラー");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			if (!"1".equals(onet_key_ninsho_flg))
			{
				// ワンタイムキーが認証されていない
				X31SWebLog.DEBUG_LOG.debug("ワンタイムキーが認証されていない");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0152);
			}
			
			if (!JFUWebCommon.isNull(onet_key_send_time))
			{
				int addHour = Integer.parseInt(JFUWebCommon.getDispItem(ONETIMEKEY_YUKOU_TIME));
				String onet_key_yukou_kigen = JFUCommonUtil.addHour(onet_key_send_time + "00", addHour);
				if (JCCWebCommon.getOpeDate(this, null).compareTo(onet_key_yukou_kigen) > 0)
				{
					// ワンタイムキー無効エラー
					X31SWebLog.DEBUG_LOG.debug("ワンタイムキー無効エラー");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0151);
				}
			}
		} else {
			// 結果が存在しない場合
			X31SWebLog.DEBUG_LOG.debug("WEB申込情報データ無し");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0152);
		}
		
		// 申込一意取得取得
		if (outputMap.containsKey(FUSV034702SC))
		{
			parentMap = (HashMap)outputMap.get(FUSV034702SC);
		}
		if (parentMap != null && parentMap.size() > 0 && parentMap.containsKey(EKK0011A501CBSMSG1LIST))
		{
			ArrayList<HashMap<String, Object>> ekk0011a501cbsmsg1list = (ArrayList)parentMap.get(EKK0011A501CBSMSG1LIST);
			if (ekk0011a501cbsmsg1list != null && ekk0011a501cbsmsg1list.size() > 0)
			{
				// サービス契約一覧取得
				if (outputMap.containsKey(FUSV034703SC))
				{
					parentMap = (HashMap)outputMap.get(FUSV034703SC);
				}
				if (parentMap != null && parentMap.size() > 0 && parentMap.containsKey(EKK0081B002CBSMSG1LIST))
				{
					ArrayList<HashMap<String, Object>> ekk0081b002cbsmsg1list = (ArrayList)parentMap.get(EKK0081B002CBSMSG1LIST);
					if (ekk0081b002cbsmsg1list != null && ekk0081b002cbsmsg1list.size() > 0)
					{
						ArrayList childList = (ArrayList)parentMap.get(EKK0081B002CBSMSG1LIST);
						for (int i = 0; i < childList.size(); i++)
						{
							HashMap childMap = (HashMap)childList.get(i);
							String svc_kei_stat = getValue(childMap, SVC_KEI_STAT);
							if (!JFUStrConst.CD00037_010.equals(svc_kei_stat))
							{
								// サービス契約ステータスエラー
								X31SWebLog.DEBUG_LOG.debug("サービス契約ステータスエラー");
								throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
							}
						}
					} else {
						// 結果が存在しない場合
						X31SWebLog.DEBUG_LOG.debug("申込データ無し");
						throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
					}
				} else {
					// 結果が存在しない場合
					X31SWebLog.DEBUG_LOG.debug("申込データ無し");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
				}
			} else {
				// 結果が存在しない場合
				X31SWebLog.DEBUG_LOG.debug("申込データ無し");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
		} else {
			// 結果が存在しない場合
			X31SWebLog.DEBUG_LOG.debug("申込データ無し");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}
		
		// リダイレクト先URL設定
		String ida_redirect_url = JFUWebCommon.getApplicationConst(IDA_EOID_REGIST_URL);
		serviceFormBean.sendMessageString(FUW00966SFConst.REDIRECT_URL, X31CWebConst.DATABEAN_SET_VALUE, ida_redirect_url + skb_key);
		// -------------------------------------------------
		// ■遷移先画面の指定
		// -------------------------------------------------
		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUWebCommon.getScreenId(this));
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00966);

		DEBUG_LOG.info("----- FUW00966 End init -----");

		return true;
	}
	/**
	 * サービス実行結果から値を取得します。
	 * 
	 * <br>
	 * @param outPutMap 結果マップ
	 * @param itemNm 項目名
	 * @return 値
	 */
	private String getValue(HashMap outPutMap, String itemNm)
	{
		String result = JFUStrConst.EMPTY;

		if(outPutMap.containsKey(itemNm) && !JFUWebCommon.isNull((String)outPutMap.get(itemNm)))
		{
			result = (String)outPutMap.get(itemNm);
		}

		return result;
	}
}
