/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0936_KKSV0936OPDBMapper
*	ソースファイル名：KKSV0936_KKSV0936OPDBMapper.java
*	作成者			：富士通
*	日付			：2019年02月12日
*＜機能概要＞
*	BP（KKSV0936OP）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v44.00.00	2019/05/08  FJ）澤田	新規作成【ANK-3610-00-00】CASHPOST登録
*   v46.00.00	2019/10/08  FJ）岡井	【ANK-3704-00-00】CASHPOST連携機能開発
*   v49.00.00	2020/04/08  FJ）岡井	【ANK-3837-00-00】CASHPOST連携：住所変更時のCP付け替え機能
*	v59.00.00	2022/04/06  FJ) 美濃原	【ANK-4229-00-00】CASHPOST登録結果のメール送付
*
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.web.webview.KKW22401SF.KKW22401SFConst;
import eo.web.webview.common.JKKCommonConst;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class KKSV0936_KKSV0936OPDBMapper {
	
	// ANK-3837-00-00 ADD START
	/** 料金グループコードリスト(ネット) **/
	private static final List<String> NET_PRC_GRP_CD_LIST = Arrays.asList("02", "03", "04");
	
	/** 付け替え先CASHPOSTコード取得項目ルール(ネット) **/
	private static final Map<String, String> TK_TAIIKI_CD_MAP;
	static
	{
		HashMap<String, String> map = new HashMap<String, String>();
		
		// 設定内容："付け替え元料金グループコード,付け替え先料金グループコード", 付け替え先CASHPOSTコードの項目名
		// ホーム(ネット)
		map.put("02,02", KKW22401SFConst.CASHPOST_CD_02);
		map.put("02,03", KKW22401SFConst.TKS_CASHPOST_CD_1_02);
		map.put("02,04", KKW22401SFConst.TKS_CASHPOST_CD_2_02);
		
		// メゾン(ネット)
		map.put("03,02", KKW22401SFConst.TKS_CASHPOST_CD_1_02);
		map.put("03,03", KKW22401SFConst.CASHPOST_CD_02);
		map.put("03,04", KKW22401SFConst.TKS_CASHPOST_CD_2_02);
		
		// マンション(ネット)
		map.put("04,02", KKW22401SFConst.TKS_CASHPOST_CD_1_02);
		map.put("04,03", KKW22401SFConst.TKS_CASHPOST_CD_2_02);
		map.put("04,04", KKW22401SFConst.CASHPOST_CD_02);
		
		TK_TAIIKI_CD_MAP = Collections.unmodifiableMap(map);
	}
	// ANK-3837-00-00 ADD END
	
	/**
	 * コンストラクタ
	 */
	public KKSV0936_KKSV0936OPDBMapper(){
	}
	
	/**
	 * 上りマッピングをする
	 * @param bean
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV093601CC(X31SDataBeanAccess[] bean, HashMap outputMap) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 1){
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		ArrayList<HashMap<String, Object>> addInfoList = new ArrayList<HashMap<String, Object>>();
		ArrayList<HashMap<String, Object>> updInfoList = new ArrayList<HashMap<String, Object>>();
		ArrayList<HashMap<String, Object>> delInfoList = new ArrayList<HashMap<String, Object>>();
		
		//検索
		parentMap.put("shori_div", "3");
		
		X31SDataBeanAccessArray custKeiHktgiList =  bean[0].getDataBeanArray(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess custKeiHktgiInf = custKeiHktgiList.getDataBean(0);
		
		// 異動区分
		String idoDiv = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_IDO_DIV, X31CWebConst.DATABEAN_GET_VALUE);

		parentMap.put("ido_div", idoDiv);

		ArrayList list = new ArrayList();
		if (parentMap.containsKey("ido_rsn_cd_list"))
		{
			list = (ArrayList)parentMap.get("ido_rsn_cd_list");
		}
		
		Integer maxIndex = (Integer)custKeiHktgiInf.sendMessage(KKW22401SFConst.IDO_RSN_CD_04, X31CWebConst.DATABEAN_GET_COUNT);
		for (int i = 0; i < maxIndex; i++)
		{
			Map childMap = new HashMap();
			if (list.size() > i)
			{
				childMap = (Map)list.get(i);
			}
			
			// 異動理由コード
			childMap.put("ido_rsn_cd", custKeiHktgiInf.sendMessageString(KKW22401SFConst.IDO_RSN_CD_04, X31CWebConst.DATABEAN_GET_VALUE, i));
			// 異動理由メモ
			childMap.put("ido_rsn_memo", custKeiHktgiInf.sendMessageString(KKW22401SFConst.IDO_RSN_MEMO_04, X31CWebConst.DATABEAN_GET_VALUE));

			list.add(childMap);
		}
		parentMap.put("ido_rsn_cd_list", list);
		
		//  → ＫＥＹ＿SYSID
		parentMap.put("sysid", bean[0].sendMessageString(KKW22401SFConst.SYSID, X31CWebConst.DATABEAN_GET_VALUE));
		
		parentMap.put("svc_kei_no", bean[0].sendMessageString(KKW22401SFConst.SVC_KEI_NO_SEARCH, X31CWebConst.DATABEAN_GET_VALUE));
		
		// ANK-3837-00-00 ADD START
		// 付け替え選択状態
		Boolean tkeSel = bean[0].sendMessageBoolean(KKW22401SFConst.TKE_SEL, X31CWebConst.DATABEAN_GET_VALUE);
		String tksSvcKeiNo = "";
		String tksPrcGrpCd = "";
		
		if (tkeSel)
		{
			// 付け替える場合
			parentMap.put("tke_sel", "1");

			// 付け替え先お客さまID
			X31SDataBeanAccessArray tksSvcKeiNoList = bean[0].getDataBeanArray(KKW22401SFConst.TKS_SVC_KEI_NO_LIST);
			X31SDataBeanAccess tksSvcKeiNoBean = tksSvcKeiNoList.getDataBean(0);
			int tksSvcKeiNoIndex = Integer.parseInt(tksSvcKeiNoBean.sendMessageString(KKW22401SFConst.INDEX_01, X31CWebConst.DATABEAN_GET_VALUE));

			tksSvcKeiNo = tksSvcKeiNoBean.sendMessageString(KKW22401SFConst.CD_DIV_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, tksSvcKeiNoIndex);
			tksPrcGrpCd = tksSvcKeiNoBean.sendMessageString(KKW22401SFConst.OTHER_CD_LIST_1_01, X31CWebConst.DATABEAN_GET_VALUE, tksSvcKeiNoIndex);
		}
		else
		{
			// 付け替えない場合
			parentMap.put("tke_sel", "0");
		}
		// ANK-3837-00-00 ADD END
		
		// 送金可能キャンペーン一覧の数だけ繰り返して設定
		X31SDataBeanAccessArray datalist = bean[0].getDataBeanArray(KKW22401SFConst.CASHPOST_RNKI_LIST);

		for (int i = 0; i < datalist.getCount(); i++)
		{
			X31SDataBeanAccess dataBean = datalist.getDataBean(i);
			// 引き継ぎの情報（自画面用）を格納するMAPを生成する
			Boolean sel = dataBean.sendMessageBoolean(KKW22401SFConst.SELECTED_BOOLEAN_02, X31CWebConst.DATABEAN_GET_VALUE);
			Boolean bk_sel = dataBean.sendMessageBoolean(KKW22401SFConst.BK_SELECTED_BOOLEAN_02, X31CWebConst.DATABEAN_GET_VALUE);
			HashMap<String, Object> infoMap = new HashMap<String, Object>();
			// ANK-4229-00-00 ADD START
			// 付け替え元CASHPOST契約番号（初期値設定）※今回処理でお客さまID付け替えを行うもの
			infoMap.put("new_rpsrc_cashpost_kei_no", "");
			// ANK-4229-00-00 ADD END
			String sohuAmnt = dataBean.sendMessageString(KKW22401SFConst.AMNT_02, X31CWebConst.DATABEAN_GET_VALUE);
			sohuAmnt = sohuAmnt.replaceAll(",", "");
			String bkSohuAmnt = dataBean.sendMessageString(KKW22401SFConst.BK_AMNT_02, X31CWebConst.DATABEAN_GET_VALUE);
			bkSohuAmnt = bkSohuAmnt.replaceAll(",", "");
			
			// ANK-3837-00-00 ADD START
			HashMap<String, Object> tkeAddMap = new HashMap<String, Object>();
			String prcGrpCd = dataBean.sendMessageString(KKW22401SFConst.PRC_GRP_CD_02, X31CWebConst.DATABEAN_GET_VALUE);
			// ANK-3837-00-00 ADD END
			
			// ANK-3837-00-00 MOD START
			if (!tkeSel)
			{
				// 付け替えしない場合、登録/変更/削除のリストに情報を設定する

				//未選択⇒選択　登録処理
				if (bk_sel == false && sel == true)
				{
					infoMap.put("sohu_amnt", sohuAmnt);
					infoMap.put("cashpost_campaign_nm", dataBean.sendMessageString(KKW22401SFConst.CASHPOST_CAMPAIGN_NM_02, X31CWebConst.DATABEAN_GET_VALUE));
					infoMap.put("cashpost_cd", dataBean.sendMessageString(KKW22401SFConst.CASHPOST_CD_02, X31CWebConst.DATABEAN_GET_VALUE));
					infoMap.put("svc_kei_no", dataBean.sendMessageString(KKW22401SFConst.SVC_KEI_NO_02, X31CWebConst.DATABEAN_GET_VALUE));
					infoMap.put("cashpost_cd", dataBean.sendMessageString(KKW22401SFConst.CASHPOST_CD_02, X31CWebConst.DATABEAN_GET_VALUE));
					// ANK-3704-00-00 ADD START
					infoMap.put("gokei_max_kangen_amnt", dataBean.sendMessageString(KKW22401SFConst.GOKEI_MAX_KANGEN_AMNT_02, X31CWebConst.DATABEAN_GET_VALUE));
					// ANK-3704-00-00 ADD END
					addInfoList.add(infoMap);
				}
				//選択⇒選択 更新処理
				else if (bk_sel == true && sel == true)
				{
					//金額を変更した場合だけ　更新する
					if (!sohuAmnt.equals(bkSohuAmnt)){
						infoMap.put("cashpost_kei_no", dataBean.sendMessageString(KKW22401SFConst.CASHPOST_KEI_NO_02, X31CWebConst.DATABEAN_GET_VALUE));
						infoMap.put("cashpost_campaign_nm", dataBean.sendMessageString(KKW22401SFConst.CASHPOST_CAMPAIGN_NM_02, X31CWebConst.DATABEAN_GET_VALUE));
						infoMap.put("cashpost_cd", dataBean.sendMessageString(KKW22401SFConst.CASHPOST_CD_02, X31CWebConst.DATABEAN_GET_VALUE));
						infoMap.put("sohu_amnt", sohuAmnt);
						infoMap.put("upd_dtm_bf", dataBean.sendMessageString(KKW22401SFConst.UPD_DTM_02, X31CWebConst.DATABEAN_GET_VALUE));
						// ANK-3704-00-00 ADD START
						infoMap.put("gokei_max_kangen_amnt", dataBean.sendMessageString(KKW22401SFConst.GOKEI_MAX_KANGEN_AMNT_02, X31CWebConst.DATABEAN_GET_VALUE));
						// ANK-3704-00-00 ADD END
						updInfoList.add(infoMap);
					}
				}
				//選択⇒未選択 削除処理
				else if (bk_sel == true && sel == false)
				{
					infoMap.put("cashpost_kei_no", dataBean.sendMessageString(KKW22401SFConst.CASHPOST_KEI_NO_02, X31CWebConst.DATABEAN_GET_VALUE));
					infoMap.put("cashpost_campaign_nm", dataBean.sendMessageString(KKW22401SFConst.CASHPOST_CAMPAIGN_NM_02, X31CWebConst.DATABEAN_GET_VALUE));
					infoMap.put("cashpost_cd", dataBean.sendMessageString(KKW22401SFConst.CASHPOST_CD_02, X31CWebConst.DATABEAN_GET_VALUE));
					infoMap.put("gene_add_dtm", dataBean.sendMessageString(KKW22401SFConst.GENE_ADD_DTM_02, X31CWebConst.DATABEAN_GET_VALUE));
					infoMap.put("upd_dtm_bf", dataBean.sendMessageString(KKW22401SFConst.UPD_DTM_02, X31CWebConst.DATABEAN_GET_VALUE));
					// ANK-3704-00-00 ADD START
					infoMap.put("sohu_amnt", bkSohuAmnt);
					infoMap.put("gokei_max_kangen_amnt", dataBean.sendMessageString(KKW22401SFConst.GOKEI_MAX_KANGEN_AMNT_02, X31CWebConst.DATABEAN_GET_VALUE));
					// ANK-3704-00-00 ADD END
					delInfoList.add(infoMap);
				}
			}
			else
			{
				// 付け替えする場合、登録(付け替え先)/削除(付け替え元)のリストに情報を設定する
				String cashpostCdItemNm = KKW22401SFConst.CASHPOST_CD_02;
				if (NET_PRC_GRP_CD_LIST.contains(prcGrpCd))
				{
					// ネットの場合、付け替え先CASHPOSTコードが設定されている項目を取得する
					cashpostCdItemNm = TK_TAIIKI_CD_MAP.get(prcGrpCd + "," + tksPrcGrpCd);
				}
				if ("".equals(cashpostCdItemNm) || cashpostCdItemNm == null)
				{
					// 付け替え先CASHPOSTコードの項目が設定されていない場合、デフォルト値を設定する
					cashpostCdItemNm = KKW22401SFConst.CASHPOST_CD_02;
				}

				// 付け替え先 登録処理
				if (bk_sel == true)
				{
					tkeAddMap.put("sohu_amnt", sohuAmnt);
					tkeAddMap.put("cashpost_campaign_nm", dataBean.sendMessageString(KKW22401SFConst.CASHPOST_CAMPAIGN_NM_02, X31CWebConst.DATABEAN_GET_VALUE));
					tkeAddMap.put("cashpost_cd", dataBean.sendMessageString(cashpostCdItemNm, X31CWebConst.DATABEAN_GET_VALUE));
					tkeAddMap.put("svc_kei_no", tksSvcKeiNo);
					tkeAddMap.put("gokei_max_kangen_amnt", dataBean.sendMessageString(KKW22401SFConst.GOKEI_MAX_KANGEN_AMNT_02, X31CWebConst.DATABEAN_GET_VALUE));
					// ANK-4229-00-00 ADD START
					tkeAddMap.put("new_rpsrc_cashpost_kei_no", dataBean.sendMessageString(KKW22401SFConst.CASHPOST_KEI_NO_02, X31CWebConst.DATABEAN_GET_VALUE));
					// ANK-4229-00-00 ADD END
					addInfoList.add(tkeAddMap);
				}

				// 付け替え元 削除処理
				if (bk_sel == true)
				{
					infoMap.put("cashpost_kei_no", dataBean.sendMessageString(KKW22401SFConst.CASHPOST_KEI_NO_02, X31CWebConst.DATABEAN_GET_VALUE));
					infoMap.put("cashpost_campaign_nm", dataBean.sendMessageString(KKW22401SFConst.CASHPOST_CAMPAIGN_NM_02, X31CWebConst.DATABEAN_GET_VALUE));
					infoMap.put("cashpost_cd", dataBean.sendMessageString(KKW22401SFConst.CASHPOST_CD_02, X31CWebConst.DATABEAN_GET_VALUE));
					infoMap.put("gene_add_dtm", dataBean.sendMessageString(KKW22401SFConst.GENE_ADD_DTM_02, X31CWebConst.DATABEAN_GET_VALUE));
					infoMap.put("upd_dtm_bf", dataBean.sendMessageString(KKW22401SFConst.UPD_DTM_02, X31CWebConst.DATABEAN_GET_VALUE));
					infoMap.put("sohu_amnt", bkSohuAmnt);
					infoMap.put("gokei_max_kangen_amnt", dataBean.sendMessageString(KKW22401SFConst.GOKEI_MAX_KANGEN_AMNT_02, X31CWebConst.DATABEAN_GET_VALUE));
					delInfoList.add(infoMap);
				}
			}
			// ANK-3837-00-00 MOD END
		}
		parentMap.put("add_info_list", addInfoList);
		parentMap.put("upd_info_list", updInfoList);
		parentMap.put("del_info_list", delInfoList);

		
		outputMap.put("KKSV093601CC", parentMap);

		return outputMap;
	}
}