/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0265_FUSV0265OPDBMapper
*	ソースファイル名：FUSV0265_FUSV0265OPDBMapper.java
*	作成者			：FJ
*	日付			：2013年02月15日
*＜機能概要＞
*	BP（紹介一意照会）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v5.00		2013/02/15	FJ			新規作成
*	v7.00		2014/02/19	FJ)畑中 	【ANK-1914-00-00】LaLaCall通話明細について
*	v8.00		2014/04/14	FJ)谷本 	【ANK-2108-00-00】【ＮＯ．１４７５】【LCstep2】通話明細旧URLのパラメータ無し対応
*
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JFUStrConst;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW10901SF.FUW10901SFConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 *  @author 富士通
 */
public class FUSV0265_FUSV0265OPDBMapper
{

	/** DataBean操作種別：項目値設定 */
	private static final String SET = X31CWebConst.DATABEAN_SET_VALUE;
	/** DataBean操作種別：項目値取得 */
	private static final String GET = X31CWebConst.DATABEAN_GET_VALUE;
	/** DataBean操作種別：項目値取得 */
	private static final String ADD = X31CWebConst.DATABEAN_ADD_VALUE;

	/** 050アプリ電話番号一覧照会SC */
	private static final String FUSV026501SC = "FUSV026501SC";
	/** コンテンツ契約050電話番号内訳一覧照会（フロント通話明細用）.コンテンツ契約内訳一覧照会 */
	private static final String ECN0331B003CBSMSG1LIST = "ECN0331B003CBSMsg1List";

	/** KEY_SYSID */
	private static final String KEY_SYSID = "key_sysid";
	/** 050電話番号 */
	private static final String N_050_TELNO = "n_050_telno";
	/** 050アプリ電話番号一覧照会.サービス開始年月日時分秒 */
	private static final String SVC_STA_DTM = "svc_sta_dtm";
	/** 050アプリ電話番号一覧照会.サービス終了年月日時分秒 */
	private static final String SVC_END_DTM = "svc_end_dtm";

	/** 画面ID 050アプリ通話明細(電話番号連携) */
	private static final String GAMEN_ID_LALACALL_NUMBER = "050_call_details_by_number";

	/** 050アプリ設定状態コード */
	private static final String N_050APL_STAT = "n_050apl_sette_stat_cd";
	/**
	 * コンストラクタ
	 */
	public FUSV0265_FUSV0265OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * @param bean サービスフォームBean
	 * @param outputMap 検索結果格納用マップ
	 * @param func_code 機能コード
	 * @param svcEndymd サービス終了年月日
	 * @return outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV026501SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(JCMConstants.FUNC_CODE_KEY, func_code);

		// 共有フォームBean.SSO情報.SYSID → ＫＥＹ＿SYSID
		parentMap.put(KEY_SYSID, bean[0].sendMessageString(CommonInfoCFConst.SYSID_21, GET));

		ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> detailMap = new HashMap<String, Object>();
		arrayList.add(detailMap);
		parentMap.put(ECN0331B003CBSMSG1LIST, arrayList);

		outputMap.put(FUSV026501SC, parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピング
	 * @param bean サービスフォームBean
	 * @param outputMap 検索結果格納用マップ
	 * @prama gamenId 画面ID
	 * @paam decTelNo デコード後の電話番号
	 * @return flag
	 */
	@SuppressWarnings("unchecked")
	public boolean getFUSV026501SC(X31SDataBeanAccess bean, HashMap outputMap, String gamenId, String decTelNo)
	{
		boolean flag = false;
		boolean telFla = false;

		HashMap parentMap = null;

		if (outputMap.containsKey(FUSV026501SC))
		{
			parentMap = (HashMap)outputMap.get(FUSV026501SC);
		}

		ArrayList childList = (ArrayList)parentMap.get(ECN0331B003CBSMSG1LIST);

		if (null != parentMap && null != childList && parentMap.containsKey(ECN0331B003CBSMSG1LIST))
		{
			X31SDataBeanAccessArray useTelNoListArray = bean.getDataBeanArray(FUW10901SFConst.USE_TELNO_LIST);
			useTelNoListArray.clearArray();
			X31SDataBeanAccessArray aplStatCodeListArray = bean.getDataBeanArray(FUW10901SFConst.APL_STAT_CODE_LIST);
			aplStatCodeListArray.clearArray();

			X31SDataBeanAccess usetelnoListDataType = useTelNoListArray.addDataBean();
			X31SDataBeanAccess aplStatCodeListDataType = aplStatCodeListArray.addDataBean();

			// 利用電話番号コンボボックスの一時リスト
			ArrayList<String> tmpList = new ArrayList<String>();
			
			// 050アプリ設定状態コードの一時リスト
			ArrayList<String> tmpList2 = new ArrayList<String>();
			
			// 選択通話年月取得
			int tuwaYM = Integer.parseInt(bean.sendMessageString(FUW10901SFConst.CHOICE_TUWA_YM, GET));
			X31SDataBeanAccessArray useTuwaYMListDataType = bean.getDataBeanArray(FUW10901SFConst.USE_TUWA_YM_LIST);
			X31SDataBeanAccess tuwaYMDataType = useTuwaYMListDataType.getDataBean(0);
			String choiceYM = tuwaYMDataType.sendMessageString(FUW10901SFConst.VALUE_02, GET, tuwaYM);

			// 選択通話年月末日取得
			String choiceTuwaYMD = JFUWebCommon.getEndOfMonthDate(choiceYM);
			// 選択利用電話番号一時格納用
			String choiceTempTelno = JFUStrConst.EMPTY;
			// 選択利用電話番号格納用リスト１
			ArrayList<String> choiceTelnoList1 = new ArrayList<String>();
			// 選択利用電話番号格納用リスト１
			ArrayList<String> choiceTelnoList2 = new ArrayList<String>();

			for (int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);

				// ●利用電話番号(選択値)
				// サービス開始年月日時分秒
				String svcStaDtm = (String)childMap.get(SVC_STA_DTM);
				// サービス終了年月日時分秒
				String svcEndDtm = (String)childMap.get(SVC_END_DTM);

				if (null != svcStaDtm && null != svcEndDtm)
				{
					// サービス開始年月日時分秒 <= 選択通話年月末日 <= サービス終了年月日時分秒の場合
					if ((choiceTuwaYMD.compareTo(svcStaDtm) >= JFUStrConst.I_ZERO) && (svcEndDtm.compareTo(choiceTuwaYMD) >= JFUStrConst.I_ZERO))
					{
						choiceTelnoList1.add((String)childMap.get(N_050_TELNO));//選択利用電話番号コンボボックス格納リスト１
					}
					// 選択通話年月末日 > サービス終了年月日時分秒の場合
					else if (choiceTuwaYMD.compareTo(svcEndDtm) > JFUStrConst.I_ZERO)
					{
						choiceTelnoList2.add((String)childMap.get(N_050_TELNO));//選択利用電話番号コンボボックス格納リスト２
					}

					if (i == 0 && null != (String)childMap.get(N_050_TELNO) && !JFUStrConst.EMPTY.equals((String)childMap.get(N_050_TELNO)))
					{
						flag = true;
					}

					// ●利用電話番号(コンボボックス)
					String telno = (String)childMap.get(N_050_TELNO);
					
					// ●050アプリ設定状態
					String aplStat = (String)childMap.get(N_050APL_STAT);
					
					// 重複した利用電話番号以外をリストに格納。
					if (!tmpList.contains(telno))
					{
						tmpList.add(telno);
						tmpList2.add(aplStat);
					}
				}
			}

			if (null != tmpList && 0 != tmpList.size())
			{
				// 利用電話番号(選択値)の設定
				if (null != choiceTelnoList1 && choiceTelnoList1.size() > JFUStrConst.I_ZERO)
				{
					choiceTempTelno = choiceTelnoList1.get(JFUStrConst.I_ZERO);
				}
				else if (null != choiceTelnoList2 && choiceTelnoList2.size() > JFUStrConst.I_ZERO)
				{
					choiceTempTelno = choiceTelnoList2.get(JFUStrConst.I_ZERO);
				}
				else
				{
					choiceTempTelno = tmpList.get(tmpList.size() - 1);
				}

				// ●利用電話番号(コンボボックス)の設定
				for (int i = 0; i < tmpList.size(); i++)
				{
					// 画面IDキーが"050_call_details_by_number" 且つ 電話番号が設定されている場合
					if (GAMEN_ID_LALACALL_NUMBER.equals(gamenId) && !JFUWebCommon.isNull(decTelNo))
					{
						if (decTelNo.equals(tmpList.get(i)))
						{
							bean.sendMessageString(FUW10901SFConst.CHOICE_TELNO, SET, String.valueOf(i));
						}
					}
					else
					{
						if (choiceTempTelno.equals(tmpList.get(i)))
						{
							bean.sendMessageString(FUW10901SFConst.CHOICE_TELNO, SET, String.valueOf(i));
						}
					}

					// 利用電話番号.利用電話番号 ← 050アプリ電話番号一覧照会マップ.コンテンツ契約内訳一覧照会（フロント通話明細用）
					usetelnoListDataType.sendMessageString(FUW10901SFConst.VALUE_03, ADD, tmpList.get(i));
					usetelnoListDataType.sendMessageString(FUW10901SFConst.DSP_VALUE_03, ADD, tmpList.get(i));

					// 画面IDキーが"050_call_details_by_number" 且つ 電話番号が設定されている場合
					if (GAMEN_ID_LALACALL_NUMBER.equals(gamenId) && !JFUWebCommon.isNull(decTelNo))
					{
						// 暗号化された電話番号が存在するか確認
						if (decTelNo.equals(tmpList.get(i)))
						{
							telFla = true;
						}
					}
				}
				
				// ●050アプリ設定状態コードの設定
				for (int i = 0; i < tmpList2.size(); i++)
				{
					// 利用電話番号.利用電話番号 ← 050アプリ電話番号一覧照会マップ.コンテンツ契約内訳一覧照会（フロント通話明細用）
					aplStatCodeListDataType.sendMessageString(FUW10901SFConst.VALUE_04, ADD, tmpList2.get(i));
					aplStatCodeListDataType.sendMessageString(FUW10901SFConst.DSP_VALUE_04, ADD, tmpList2.get(i));
				}
				
			}
		}
		
		// 画面IDキーが"050_call_details_by_number" 且つ 電話番号が設定されている場合
		if (GAMEN_ID_LALACALL_NUMBER.equals(gamenId) && !JFUWebCommon.isNull(decTelNo))
		{
			// 暗号化された電話番号が存在しない場合エラー
			if (!telFla)
			{
				flag = false;
			}
		}
		return flag;
	}
}