/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JFUGetTabletTanmtCmpKbn
*	ソースファイル名：JFUGetTabletTanmtCmpKbn.java
*	作成者			：富士通
*	日付			：2014年06月23日
*＜機能概要＞
*	タブレット端末キャンペーン区分を取得する部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v10.00     2014/08/12   FJ) 川瀬   【ANK-2223-00-00】スマリンタブレット無料キャンペーンのＷＥＢ画面への拡充
*
**********************************************************************/
package eo.web.webview.common;

import java.util.HashMap;

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 eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JPCCommonUtil;
import eo.common.util.JPCUtilCommon;
import eo.web.webview.mapping.FUSV0286_FUSV0286OPDBMapper;

/**
 * <p>
 * タブレット端末キャンペーン区分を取得する部品です。
 * </p>
 * @author 富士通
 */
public class JFUGetTabletTanmtCmpKbn extends JPCCommonUtil
{

	/** ユースケースＩＤ　FUSV0286 */
	private static final String USECASE_ID = "FUSV0286";

	/** eoスマートリンクキャンペーン有効区分リスト */
	private static final String SML_CAMP_LIST = "SML_CAMP_LIST";

	/** 同日を含む／含まないの指定フラグ("1"：含む) */
	private static final String DOJITSU_HUKUMU = "1";

	/** プロパティファイルに設定されている割引サービスコード */
	private static final String WRIB_SVC_CD = "wrib_svc_cd";

	/** プロパティファイルに設定されているデータ抽出項目コード */
	private static final String DCHSKM_CD = "dchskm_cd";

	/** プロパティファイルに設定されている開始年月日 */
	private static final String STA_YMD = "sta_ymd";

	/** プロパティファイルに設定されている終了年月日 */
	private static final String END_YMD = "end_ymd";

	/** 申込回線タイプ：１：ホームタイプ*/
	private static final String MSKM_KSN_TYPE_1 = "1";

	/** 申込回線タイプ：３：メゾンタイプ*/
	private static final String MSKM_KSN_TYPE_3 = "3";

	/** 割引サービスコードマップ*/
	private static final String INF_WRIB_SVC_CODE_MAP = "infWribSvcCodeMap";

	/** データ抽出項目コードマップ*/
	private static final String INF_DCHSKM_CODE_MAP = "infDchskmCodeMap";

	/** プロパティファイル取得文字列 フルルKansai */
	private static final String TRAT_FRR = "trat_frr";
	
	/** プロパティファイル取得文字列 カカクコム */
	private static final String TRAT_KAKAKUCOM = "trat_kakakucom";
	
	/**
	 * タブレット端末キャンペーン区分を取得する。
	 *
	 * @param bl
	 * @param paramBean
	 * @param toriatsukaiCd
	 * @param mskmKsnType
	 * @param tabletTanmtCampaignKbn
	 * @return tabletTanmtCmpKbnValue
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public static String getTabletTanmtCmpKbn(X31BWebBusinessLogic bl, X31SDataBeanAccess[] paramBean, String toriatsukaiCd, String mskmKsnType,
			String checkPrcsCd, String checkPplanCd) throws Exception
	{
		// プロパティファイルより、フルルKansai、カカクコムを取得する。
		String tratFrr = getDispText(JFUScreenConst.SCREEN_ID_FUW00144, TRAT_FRR);
		String tratKakakucom = getDispText(JFUScreenConst.SCREEN_ID_FUW00144, TRAT_KAKAKUCOM);
		
		String tabletTanmtCmpKbnValue = JFUStrConst.EMPTY;
		String MskmKsnFlg = JFUStrConst.S_ZERO;
		// ホームまたはメゾンの場合
		if (MSKM_KSN_TYPE_1.equals(mskmKsnType)
				|| MSKM_KSN_TYPE_3.equals(mskmKsnType))
		{
			MskmKsnFlg = JFUStrConst.S_ONE;
		}

		// タブレット端末キャンペーン区分
		StringBuilder tabletTanmtCampaignKbn = new StringBuilder();

		// ホームまたはメゾンで、取扱店コードが価格com、フルル関西以外の場合
		if (JFUStrConst.S_ONE.equals(MskmKsnFlg)
				&& (!tratKakakucom.equals(toriatsukaiCd) && !tratFrr.equals(toriatsukaiCd)))
		{
			// eoスマートリンクキャンペーン有効区分リストを取得
			String[] smlCampList = null; 
			String smlCamp = JFUWebCommon.getDispText(JFUStrConst.EMPTY, SML_CAMP_LIST);
			if (!JFUWebCommon.isNull(smlCamp))
			{
				smlCamp = smlCamp.trim();
				smlCampList = smlCamp.split(JFUStrConst.COMMA, 0);
			}

			String prcGrpCd = JFUStrConst.EMPTY;

			if(MSKM_KSN_TYPE_1.equals(mskmKsnType))
			{
				prcGrpCd = JFUStrConst.CD00133_02;
			}
			else if(MSKM_KSN_TYPE_3.equals(mskmKsnType))
			{
				prcGrpCd = JFUStrConst.CD00133_03;
			}

			if (smlCampList != null && smlCampList.length > 0)
			{

				// ユースケースID格納用マップを生成
				HashMap<String, String> paramMap = new HashMap<String, String>();
				paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID);
				
				FUSV0286_FUSV0286OPDBMapper mapper = new FUSV0286_FUSV0286OPDBMapper();
				HashMap<String, Object> inputMap = new HashMap<String, Object>();
				mapper.setFUSV028601CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1, checkPrcsCd, checkPplanCd, prcGrpCd);
				mapper.setFUSV028602CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1, checkPrcsCd, checkPplanCd, prcGrpCd);
	
				// 登録処理呼出
				HashMap<String, Object> outputMap = new HashMap<String, Object>();
	
				// サービス実行
				try
				{
					bl.invokeService(paramMap, inputMap, outputMap);
				}
				catch (JCCWebServiceException jwse)
				{
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
				}

				for (int i = 0; i < smlCampList.length; i++)
				{
					// プロパティファイルに設定されている割引サービスコードを取得
					String dispWribSvcCd = JFUWebCommon.getDispTextSmlCamp(smlCampList[i], WRIB_SVC_CD);
					// プロパティファイルに設定されているデータ抽出項目コードを取得
					String dispDchskmCd = JFUWebCommon.getDispTextSmlCamp(smlCampList[i], DCHSKM_CD);
					// プロパティファイルに設定されている開始年月日を取得
					String dispStaymd = JFUWebCommon.getDispTextSmlCamp(smlCampList[i], STA_YMD);
					// プロパティファイルに設定されている終了年月日を取得
					String dispEndymd = JFUWebCommon.getDispTextSmlCamp(smlCampList[i], END_YMD);
					// オンライン運用日付を取得
					String opeDate = JFUWebCommon.getOpeDate(bl, null);

					// 開始年月日、終了年月日のどちらかがnullの場合、次処理へ遷移する。
					if(JFUWebCommon.isNull(dispStaymd) || JFUWebCommon.isNull(dispEndymd))
					{
						continue;
					}

					// オンライン運用日付がプロパティの有効範囲適用外の場合、次処理へ進む。
					if (!JPCUtilCommon.isFutureDate(opeDate, dispStaymd, DOJITSU_HUKUMU)
							|| !JPCUtilCommon.isPastDate(opeDate, dispEndymd, DOJITSU_HUKUMU))
					{
						continue;
					}
					
					HashMap<String, Object> wribMap = new HashMap<String, Object>();
					if (outputMap.get(INF_WRIB_SVC_CODE_MAP) != null)
					{
						wribMap = (HashMap)outputMap.get(INF_WRIB_SVC_CODE_MAP);
					}

					HashMap<String, Object> dtMap = new HashMap<String, Object>();
					if (outputMap.get(INF_DCHSKM_CODE_MAP) != null)
					{
						dtMap = (HashMap)outputMap.get(INF_DCHSKM_CODE_MAP);
					}
					
					// プロパティファイルの割引サービスコードおよびデータ抽出項目コードがある場合
					if(!JFUWebCommon.isNull(dispWribSvcCd) && !JFUWebCommon.isNull(dispDchskmCd))
					{
						dispWribSvcCd = dispWribSvcCd.trim();
						dispDchskmCd = dispDchskmCd.trim();
						if (wribMap.containsKey(dispWribSvcCd))
						{
							if (dtMap.containsKey(dispDchskmCd))
							{
								tabletTanmtCampaignKbn = getTabletTanmtCampaignKbn(tabletTanmtCampaignKbn, smlCampList[i]);
							}
						}
					}
					// プロパティファイルの割引サービスコードがある場合
					else if(!JFUWebCommon.isNull(dispWribSvcCd))
					{
						dispWribSvcCd = dispWribSvcCd.trim();
						if (wribMap.containsKey(dispWribSvcCd))
						{
							tabletTanmtCampaignKbn = getTabletTanmtCampaignKbn(tabletTanmtCampaignKbn, smlCampList[i]);
						}
					}
					// データ抽出項目コードがある場合
					else if(!JFUWebCommon.isNull(dispDchskmCd))
					{
						dispDchskmCd = dispDchskmCd.trim();
						if (dtMap.containsKey(dispDchskmCd))
						{
							tabletTanmtCampaignKbn = getTabletTanmtCampaignKbn(tabletTanmtCampaignKbn, smlCampList[i]);
						}
					}
				}
			}
		}

		if(JFUWebCommon.isNull(tabletTanmtCampaignKbn))
		{
			// 返却値にタブレット端末キャンペーン区分に0を設定
			tabletTanmtCmpKbnValue = JFUStrConst.TABLET_TANMT_CMP_KBN_NASHI;
		}
		else
		{
			// 返却値にタブレット端末キャンペーン区分にキャンペーン適用される値を設定
			tabletTanmtCmpKbnValue = tabletTanmtCampaignKbn.toString();
		}

		return tabletTanmtCmpKbnValue;

	}

	/**
	 * タブレット端末キャンペーン区分の設定
	 * @param tabletTanmtCampaignKbn
	 * @param i
	 * @return tabletTanmtCampaignKbn
	 * 
	 */
	private static StringBuilder getTabletTanmtCampaignKbn(StringBuilder tabletTanmtCampaignKbn, String smlCampKbn)
	{
		if(!JFUWebCommon.isNull(tabletTanmtCampaignKbn))
		{
			tabletTanmtCampaignKbn.append(JFUStrConst.COMMA);
		}
		
		tabletTanmtCampaignKbn.append(smlCampKbn);

		return tabletTanmtCampaignKbn;
	}
	
	/**
	 * DISPTEXT要素のテキストを返却します。
	 * <br>
	 * @param screenId 画面ID
	 * @param textId TEXTID
	 * @return テキスト
	 */
	public static String getDispText(String screenId, String textId)
	{
		String ret = JFUStrConst.EMPTY;
		
		try
		{
			ret = JFUWebCommon.getDispText(screenId, textId);
		}
		catch (Exception e)
		{
			return ret;
		}
		return ret;
	}
}
