/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：FUW11701SFLogic
 *   ソースファイル名：FUW11701SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2015年01月22日
 *＜機能概要＞
 *   ID登録情報照会ログインリダイレクトのビューロジッククラスです。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2015/01/22   FJ)中西     新規作成
 *   v33.00      2017/09/01   FJ)張本     ANK-3180-00-00_工事進捗画面およびＩＤ登録証画面の廃止について
 *
**********************************************************************/
package eo.web.webview.FUW11701SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import javax.servlet.http.HttpServletRequest;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
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.x33.X33CUtil;
import com.fujitsu.futurity.web.x33.X33WSessionController;

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;
import eo.web.webview.common.JFUGetTnmtType;

/**
 * ID登録情報照会ログインリダイレクトのビューロジッククラスです。
 * <p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW11701SFLogic extends JCCWebBusinessLogic
{

	/** DataBean操作種別：項目値設定 */
	private static final String SET = X31CWebConst.DATABEAN_SET_VALUE;

	/** インターフェイス項目名:Webアクセス認証キー */
	private static final String POST_ID_KEY = "key";

	/** ユーザーエージェント */
	private static final String USER_AGENT = "USER-AGENT";

	/** PC、スマホ用ベースURL取得キー */
	private static final String FU_CP_BASE_URL = "FU_CP_BASE_URL";

	/** 携帯用ベースURL取得キー */
	private static final String FU_MM_BASE_URL = "FU_MM_BASE_URL";

	/** PC、スマホ用ベースURL */
	private static final String CP_BASE_URL = JFUWebCommon.getApplicationConst(FU_CP_BASE_URL);

	/** 携帯用ベースURL */
	private static final String MM_BASE_URL = JFUWebCommon.getApplicationConst(FU_MM_BASE_URL);

	/** 使用端末判定 携帯 */
	private static final String MOBILEPHONE = "MOBILEPHONE";

	/** 携帯端末終了日 */
	private static final String MOBILEPHONE_END_YMD = "DISPSETTING/SETTING[@screenId='FUW11701']/DISPTEXT[@id='MOBILEPHONE_END_YMD']";

	/**
	 * 初期処理
	 * 
	 * @return 処理結果
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		DEBUG_LOG.info("----- FUW11701 Start init -----");
		// -------------------------------------------------
		// ■使用フォームBeanの取得
		// -------------------------------------------------
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		X31CHashMap posted_requests = null;

		DEBUG_LOG.info("----- FUW11701 Start init-----");

		// ■POSTされてきたパラメータを取得します
		posted_requests = this.getRequestParams();

		Object tmp_obj = null;
		String key = null;

		// Webアクセス認証キー取得
		tmp_obj = posted_requests.get(POST_ID_KEY);
		key = (tmp_obj == null) ? (JFUStrConst.EMPTY) : (tmp_obj.toString().trim());
//		keyが取得出来なくても、各利用端末のパスワード入力画面へ遷移させる 2015/03/04
//		if( (JFUStrConst.EMPTY).equals(key) ){
//			// Webアクセス認証キー取得出来なかったとき
//			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
//		}

		// ●リダイレクト先URL取得
		String strRedirectUrl = getRedirectUrl();

		// リダイレクト先URL設定
		serviceFormBean.sendMessageString(FUW11701SFConst.REDIRECT_URL, SET, strRedirectUrl+"?key="+key);

		// Webアクセス認証キー設定
		serviceFormBean.sendMessageString(FUW11701SFConst.WEB_NINSHO_KEY, SET, 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_FUW11701);

		DEBUG_LOG.info("----- FUW11701 End init -----");

		return true;
	}

	/**
	 * ユーザーエージェントに含まれている文字列から端末をチェックする
	 * <br>
	 * @return retUrl リダイレクト先URL
	 * @throws Exception
	 */
	private String getRedirectUrl() throws Exception
	{
		String strBaseUrl="";
		String strSubUrl="";
		String retUrl="";

		DEBUG_LOG.info("----- FUW11701 getRedirectUrl() Start -----");

		X33WSessionController session_controller = X33CUtil.getSession(this.getSessionId());
		HttpServletRequest request = session_controller.getServletRequest();
		String userAgent = request.getHeader(USER_AGENT);

		String retType ="";
		try{
			retType = JFUGetTnmtType.getTnmtType( userAgent );
		}catch (JCCBusinessException je){
			
		}catch(Exception e){
			retUrl="";
		}
		
		// 環境に依存するため、ベースとなるURLを判断する。
		if( MOBILEPHONE.equals(retType) ){
			// 携帯の場合
			strBaseUrl = MM_BASE_URL;
			// 携帯端末終了日を取得
			String mobEndYmd = JFUWebCommon.getDispItem(MOBILEPHONE_END_YMD);
			if (JFUWebCommon.getOpeDate(this, null).compareTo(mobEndYmd) >= 0)
			{
				// 携帯端末終了日以降の場合
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0012);
			}
		}
		else
		{
			// 携帯ではない＝PC or スマホの場合
			strBaseUrl = CP_BASE_URL;
		}
		if( (JFUStrConst.EMPTY).equals(strBaseUrl)){
			// ベースのURLが取得出来なかった場合
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}

		/** 定義取得パス オプション名 */
		// 上記で取得した先頭部分のURLに結合させるURLを定義から取得。
		String PATH_REDIRECT_URL = "DISPSETTING/SETTING[@screenId='FUW11701']/OUTLINK[@id='"+retType+"']";

		strSubUrl = JFUWebCommon.getLinkItem(PATH_REDIRECT_URL);
		if( (JFUStrConst.EMPTY).equals(strSubUrl) ){
			// プロパティファイル（FULinkDefinition.xml）のOUTLINKのidが含まれていない場合は
			// リダイレクト先URLの取得が出来なかったと判断
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
		retUrl = strBaseUrl + strSubUrl;

		DEBUG_LOG.info("----- FUW11701 getRedirectUrl() End -----");

		return retUrl;
	}
}
