/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0348_FUSV0348OPDBMapper
*	ソースファイル名：FUSV0348_FUSV0348OPDBMapper.java
*	作成者			：富士通
*	日付			：2021年05月23日
*＜機能概要＞
*	BP（外部リンク（ｍｉｎｅｏ）用メールアドレス取得)）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン  修正日      修正者      修正内容
*	v53.00      2021/05/23  FJ)西川     【ANK-4009-13-00】CX戦略WG方針対応_mineo同時申込時の挙動
*
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;

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.common.util.JFUCommonUtil;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW00932SF.FUW00932SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUEncryptUtil;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをします。
 * <p>
 * <BR>
 * @author 富士通
 */

@SuppressWarnings("unchecked")
public class FUSV0348_FUSV0348OPDBMapper
{
	// ■SC
	/** FUSV034801SC */
	private static final String FUSV034801SC = "FUSV034801SC";

	// ■SC項目
	/** 機能コード */
	private static final String FUNC_CODE = "func_code";
	/** ＫＥＹ＿SYSID */
	private static final String KEY_SYSID = "key_sysid";
	/** メールアドレス */
	private static final String MLAD = "mlad";

	// ■SC明細
	/** 連絡先(コンテンツ用メールアドレス)一覧照会明細 */
	private static final String ECK0201B002CBSMSG1LIST = "ECK0201B002CBSMsg1List";

	/** アプリケーションプロパティから共通暗号化キーを取得するキー (mineo申込) */
	private static final String MINEO_MSKM_ENCRYPTION_KEY = "MINEO_MSKM_ENCRYPTION_KEY";
	/** アプリケーションプロパティから初期化ベクトルを取得するキー (mineo申込) */
	private static final String MINEO_MSKM_ENCRYPTION_IV_KEY = "MINEO_MSKM_ENCRYPTION_IV_KEY";
	/** 複合化キー */
	private static final String TRUE_KEY = "ENCRYPT_KEY";

	/**
	 * コンストラクタです。
	 */
	public FUSV0348_FUSV0348OPDBMapper()
	{
	}

	/**
	 * 連絡先(コンテンツ用メールアドレス)一覧照会の上りマッピング処理です。
	 * 
	 * <br>
	 * @param commonInfoBean 共有フォームBean
	 * @param outputMap アウトマップ
	 * @param funcCd 機能コード
	 * @return マッピング結果
	 */
	public HashMap<String, Object> setFUSV034801SC(X31SDataBeanAccess commonInfoBean, HashMap outputMap, String funcCd)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// WEB新規情報
		X31SDataBeanAccess web_new_infobean = getWebInfo(commonInfoBean);

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, funcCd);

		// SYSID
		String sysid = web_new_infobean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE);

		// KEY_SYSID(eoID)
		parentMap.put(KEY_SYSID, sysid);

		ArrayList arrayList = new ArrayList<HashMap>();
		HashMap detailMap = new HashMap();
		arrayList.add(detailMap);
		parentMap.put(ECK0201B002CBSMSG1LIST, arrayList);

		outputMap.put(FUSV034801SC, parentMap);

		return outputMap;
	}

	/**
	 * 連絡先(コンテンツ用メールアドレス)一覧照会の下りマッピング処理です。
	 * 
	 * <br>
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap 結果マップ
	 * @return データBean
	 */
	public X31SDataBeanAccess getFUSV034801SC(X31SDataBeanAccess serviceInfoBean, HashMap outputMap) throws Exception
	{

		//連絡先(コンテンツ用メールアドレス)
		String mlad = null;

		HashMap parentMap = null;
		if (outputMap.containsKey(FUSV034801SC))
		{
			parentMap = (HashMap)outputMap.get(FUSV034801SC);
		}

		if (parentMap != null && parentMap.size() > 0 && parentMap.containsKey(ECK0201B002CBSMSG1LIST))
		{
			// 検索結果全件取得
			ArrayList childList = (ArrayList)parentMap.get(ECK0201B002CBSMSG1LIST);
			if (childList != null || childList.size() > 0)
			{
				for (int i = 0; i < childList.size(); i++)
				{
					// サービスIFが連絡先(コンテンツ用メールアドレス)一覧照会が世代の昇順ため、最後の最新レコードのメールアドレス値を取得。
					HashMap childMap = (HashMap)childList.get(i);
					mlad = getValue(childMap, MLAD);
				}
			}
		}

		if (mlad == null || mlad.length() == 0)
		{
			// 連絡先(コンテンツ用メールアドレス)が存在しない場合、空を設定し処理を終了する
			serviceInfoBean.sendMessageString(FUW00932SFConst.OUTLINK_MINEO_MLAD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		}
		else
		{
			// 連絡先(コンテンツ用メールアドレス)が存在する場合、暗号化して設定する。

			// 共通暗号化キーをAPLConstから取得
			String outlinkMineoKey = JFUCommonUtil.decryptKey(TRUE_KEY, JCCWebCommon.getApplicationConst(MINEO_MSKM_ENCRYPTION_KEY));
			// 初期化ベクトルをAPLConstから取得
			String outlinkMineoIv = JFUCommonUtil.decryptKey(TRUE_KEY, JCCWebCommon.getApplicationConst(MINEO_MSKM_ENCRYPTION_IV_KEY));
			String encContMlad = JFUEncryptUtil.encryptAES(outlinkMineoKey, outlinkMineoIv, mlad);
			// メールアドレス
			serviceInfoBean.sendMessageString(FUW00932SFConst.OUTLINK_MINEO_MLAD, X31CWebConst.DATABEAN_SET_VALUE, encContMlad);
		}

		return serviceInfoBean;
	}

	/**
	 * サービス実行結果から値を取得します。
	 * 
	 * <br>
	 * @param outPutMap 結果マップ
	 * @param itemNm 項目名
	 * @return 値
	 */
	private String getValue(HashMap outPutMap, String itemNm)
	{
		String result = JFUStrConst.EMPTY;

		if (outPutMap.containsKey(itemNm) && !JFUWebCommon.isNull(outPutMap.get(itemNm)))
		{
			result = (String)outPutMap.get(itemNm);
		}

		return result;
	}

	/**
	 * WEB新規情報
	 * 
	 * @param bean
	 * @return bn
	 */
	private X31SDataBeanAccess getWebInfo(X31SDataBeanAccess bean)
	{
		X31SDataBeanAccessArray arr = bean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		if (arr.getCount() == 0)
		{
			arr.addDataBean();
		}
		X31SDataBeanAccess bn = arr.getDataBean(0);

		return bn;
	}
}