/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：KKSV1044_KKSV1044OPDBMapper
 *	ソースファイル名：KKSV1044_KKSV1044OPDBMapper.java
 *	作成者			：FJ
 *	日付			：2025年01月07日
 *＜機能概要＞
 *	BP(B-CASカード／ACAS番号登録画面)へのＤ−Ｂマッピングクラスです。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v74.00.00	2025/01/07	GDC)J.Tagongtong	「ANK-4592-00-00」テレビ新コース（スカパー用）
 **********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;
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.common.util.JPCDateChecker;
import eo.common.util.JPCUtilCommon;
import eo.web.webview.KKW22801SF.KKW22801SFConst;

public class KKSV1044_KKSV1044OPDBMapper {
	
	/**
	 * コンストラクタ
	 */
	public KKSV1044_KKSV1044OPDBMapper(){
	}

	/** 処理コード CASカード登録・削除 */
	private static final String SHORI_CD_CASCD_ADD_DEL = "1";
	
	/** 相手システムID (バックヤード) */
	private static final String AITE_SYSID_BKYRD = "3";
	
	/** 鍵開け予約中 */
	private static final String RSV_UNLOCK = "鍵開け予約中";
	
	/** 鍵閉め予約中 */
	private static final String RSV_UNLOCKED = "鍵閉め予約中";
	
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：B-CASカード／ACAS番号登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV104401CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_cd) 
	{
		if(bean == null)
		{
			return null;
		}
		
		if(bean.length != 1)
		{
			return null;
		}
		ArrayList<Map<String, String>> cas_upd_list = new ArrayList<Map<String, String>>();
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		// 処理コード
		parentMap.put("shori_cd", SHORI_CD_CASCD_ADD_DEL);
		// 機能コード
		parentMap.put("func_cd", func_cd);
		// サービス契約番号
		parentMap.put("svc_kei_no", bean[0].sendMessageString("お客さまID", X31CWebConst.DATABEAN_GET_VALUE));
		// 相手システムID
		parentMap.put("aite_sysid", AITE_SYSID_BKYRD);
		// CAS更新リスト
		parentMap.put("cas_upd_list", cas_upd_list);
		
		// スカパー鍵情報操作CCマップ
		outputMap.put("SPTVKEYINFOOPERATECC", parentMap);
		
		return outputMap;
	}
	
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：B-CASカード／ACAS番号登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV104402CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_cd, String chg_div) 
	{
		if(bean == null)
		{
			return null;
		}
		
		if(bean.length != 1)
		{
			return null;
		}
		
		HashMap<String, String> casUpdListMap = new HashMap<String, String>();
		casUpdListMap.put("cascd_no", bean[0].sendMessageString("CAS-ID（チェック用）", X31CWebConst.DATABEAN_GET_VALUE));
		casUpdListMap.put("frame_no", "0");
		casUpdListMap.put("chg_div", chg_div);
		
		ArrayList<Map<String, String>> cas_upd_list = new ArrayList<Map<String, String>>();
		cas_upd_list.add(casUpdListMap);
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		// 処理コード
		parentMap.put("shori_cd", SHORI_CD_CASCD_ADD_DEL);
		// 機能コード
		parentMap.put("func_cd", func_cd);
		// サービス契約番号
		parentMap.put("svc_kei_no", bean[0].sendMessageString("お客さまID", X31CWebConst.DATABEAN_GET_VALUE));
		// 相手システムID
		parentMap.put("aite_sysid", AITE_SYSID_BKYRD);
		// CAS更新リスト
		parentMap.put("cas_upd_list", cas_upd_list);
		
		// スカパー鍵情報操作CCマップ
		outputMap.put("SPTVKEYINFOOPERATECC", parentMap);
		
		return outputMap;
	}
	
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：B-CASカード／ACAS番号登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV104403CC(X31SDataBeanAccess[] bean, X31SDataBeanAccess  commonBean, HashMap outputMap, String func_cd, String chg_div) 
	{
		if(bean == null)
		{
			return null;
		}
		
		if(bean.length != 1)
		{
			return null;
		}
		
		HashMap<String, String> casUpdListMap = new HashMap<String, String>();
		casUpdListMap.put("cascd_no", bean[0].sendMessageString("CAS-ID", X31CWebConst.DATABEAN_GET_VALUE));
		casUpdListMap.put("frame_no", bean[0].sendMessageString("枠", X31CWebConst.DATABEAN_GET_VALUE));
		casUpdListMap.put("chg_div", chg_div);
		
		ArrayList<Map<String, String>> cas_upd_list = new ArrayList<Map<String, String>>();
		cas_upd_list.add(casUpdListMap);
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		// 処理コード
		parentMap.put("shori_cd", SHORI_CD_CASCD_ADD_DEL);
		// 機能コード
		parentMap.put("func_cd", func_cd);
		// サービス契約番号
		parentMap.put("svc_kei_no", commonBean.sendMessageString("お客さまID", X31CWebConst.DATABEAN_GET_VALUE));
		// 相手システムID
		parentMap.put("aite_sysid", AITE_SYSID_BKYRD);
		// CAS更新リスト
		parentMap.put("cas_upd_list", cas_upd_list);
		
		// スカパー鍵情報操作CCマップ
		outputMap.put("SPTVKEYINFOOPERATECC", parentMap);
		
		return outputMap;
	}
	
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：B-CASカード／ACAS番号登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV104404CC(X31SDataBeanAccess[] bean, X31SDataBeanAccess commonBean, HashMap outputMap, String func_cd, String chg_div) 
	{
		if(bean == null)
		{
			return null;
		}
		
		if(bean.length < 1)
		{
			return null;
		}
		
		// CAS更新リスト
		ArrayList<Map<String, String>> cas_upd_list = new ArrayList<Map<String, String>>();
		
		for(int i=0; i < bean.length; i++) {
			if(bean[i] != null) 
			{
				HashMap<String, String> casUpdListMap = new HashMap<String, String>();
				casUpdListMap.put("cascd_no", bean[i].sendMessageString("CAS-ID", X31CWebConst.DATABEAN_GET_VALUE));
				casUpdListMap.put("frame_no", bean[i].sendMessageString("枠", X31CWebConst.DATABEAN_GET_VALUE));
				casUpdListMap.put("chg_div", chg_div);
				
				cas_upd_list.add(casUpdListMap);
			}
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		// 処理コード
		parentMap.put("shori_cd", SHORI_CD_CASCD_ADD_DEL);
		// 機能コード
		parentMap.put("func_cd", func_cd);
		// サービス契約番号
		parentMap.put("svc_kei_no", commonBean.sendMessageString("お客さまID", X31CWebConst.DATABEAN_GET_VALUE));
		// 相手システムID
		parentMap.put("aite_sysid", AITE_SYSID_BKYRD);
		// CAS更新リスト
		parentMap.put("cas_upd_list", cas_upd_list);
		
		// スカパー鍵情報操作CCマップ
		outputMap.put("SPTVKEYINFOOPERATECC", parentMap);
		
		return outputMap;
	}
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：B-CASカード／ACAS番号登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV104405CC(X31SDataBeanAccess[] bean, X31SDataBeanAccess commonBean, HashMap outputMap) 
	{
		if(bean == null)
		{
			return null;
		}
		
		if(bean.length < 1)
		{
			return null;
		}
		
		// CAS更新リスト
		ArrayList<Map<String, Object>> casUpdList = new ArrayList<Map<String, Object>>();
		
		HashMap<String, Object> casUpdListMap = new HashMap<String, Object>();
		casUpdListMap.put("cascd_no", bean[0].sendMessageString("CAS-ID", X31CWebConst.DATABEAN_GET_VALUE));
		casUpdList.add(casUpdListMap);

		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		// サービス契約番号
		parentMap.put("svc_kei_no", commonBean.sendMessageString("お客さまID", X31CWebConst.DATABEAN_GET_VALUE));
		// CAS更新リスト
		parentMap.put("cas_op_list", casUpdList);
		// 異動理由明細
		ArrayList<HashMap<String, Object>> idoRsnDtlList = new ArrayList();
		HashMap<String, Object> idoRsnCd = new HashMap<String, Object>();
		
		// 異動理由コード
		idoRsnCd.put("ido_rsn_cd", commonBean.sendMessageString(KKW22801SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_GET_VALUE));
		idoRsnDtlList.add(idoRsnCd);
		parentMap.put("ido_rsn_dtl", idoRsnDtlList);

		// CASカード関連オプションサービス契約解約CCマップ
		outputMap.put("CASOPSVCKEIDSLCC", parentMap);
		
		return outputMap;
	}
		
	/**
	 * 下りマッピング
	 * @param bean　[0]：B-CASカード／ACAS番号登録
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV104401CC(X31SDataBeanAccess[] bean, HashMap outputMap, String opedate){
		
		HashMap parentMap = null;
		if(outputMap.containsKey("SPTVKEYINFOOPERATECC"))
		{
			parentMap = (HashMap)outputMap.get("SPTVKEYINFOOPERATECC");
		}
		
		if(parentMap != null) 
		{
			bean[0].sendMessageString("CATV顧客番号", X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("catv_cust_no"));
			bean[0].sendMessageString("料金コース", X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("pcrs_nm"));
			bean[0].sendMessageString("料金プラン", X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("pplan_nm"));
			bean[0].sendMessageString("サービス契約ステータス", X31CWebConst.DATABEAN_SET_VALUE, (String)parentMap.get("svc_kei_stat"));
			// CASカードリスト
			ArrayList<HashMap<String, Object>> casCdList = (ArrayList<HashMap<String, Object>>)parentMap.get("cascd_list");
			
			if(casCdList != null)
			{
				// CAS番号一覧
				X31SDataBeanAccessArray list_cas_no_list = bean[0].getDataBeanArray(KKW22801SFConst.CAS_NO_LIST);
				
				if(list_cas_no_list != null)
				{
					for(int i = 0; i < casCdList.size(); i++) 
					{
						X31SDataBeanAccess subbean = null;
						if(list_cas_no_list.getCount() -1 >= i){
							subbean = list_cas_no_list.getDataBean(i);
						}else{
							subbean = list_cas_no_list.addDataBean();
						}
						HashMap childMap = (HashMap)casCdList.get(i);
						if (subbean == null) {
							continue;
						}
						
						// サブBean値の設定
						if (childMap != null) {
							subbean.sendMessageString(KKW22801SFConst.CAS_ID_01, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("cascd_no"));
						} else {
							subbean.sendMessageString(KKW22801SFConst.CAS_ID_01, X31CWebConst.DATABEAN_SET_VALUE, new String());
						}
						if (childMap != null) {
							subbean.sendMessageString(KKW22801SFConst.FRAME_NO_01, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("frame_no"));
						} else {
							subbean.sendMessageString(KKW22801SFConst.FRAME_NO_01, X31CWebConst.DATABEAN_SET_VALUE, new String());
						}
						if (childMap != null) {
							subbean.sendMessageString(KKW22801SFConst.OP_NAIYO_01, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("op_um_flg_nm"));
						} else {
							subbean.sendMessageString(KKW22801SFConst.OP_NAIYO_01, X31CWebConst.DATABEAN_SET_VALUE, new String());
						}
						if (childMap != null) {
							subbean.sendMessageString(KKW22801SFConst.CAS_NO_ADD_DAY_01, X31CWebConst.DATABEAN_SET_VALUE, 
									JPCUtilCommon.formatDate((String)childMap.get("cas_no_add_ymd")));
						} else {
							subbean.sendMessageString(KKW22801SFConst.CAS_NO_ADD_DAY_01, X31CWebConst.DATABEAN_SET_VALUE, new String());
						}
						if (childMap != null) {
							String keyOpnYmd = (String)childMap.get("keyopn_ymd");
							String keyClsYmd = (String)childMap.get("keycls_ymd");
							// 予約中判断フラグ
							boolean isMapped = false;
							
							// 状態を設定する
							if(keyOpnYmd != null && !("".equals(keyOpnYmd)))
							{
								if(JPCDateChecker.isFutureDate(keyOpnYmd, opedate, "0"))
								{
									// 鍵開け年月日が運用日より未来の場合」
									// 状態：「鍵開け予約中」
									// 予約適用年月日：鍵開け年月日
									subbean.sendMessageString(KKW22801SFConst.STAT_01, X31CWebConst.DATABEAN_SET_VALUE, RSV_UNLOCK);
									subbean.sendMessageString(KKW22801SFConst.RSV_APL_YMD_01, X31CWebConst.DATABEAN_SET_VALUE, JPCUtilCommon.formatDate(keyOpnYmd));
									isMapped = true;
								} 
							}	
							if(keyClsYmd != null && !("".equals(keyClsYmd)) && !isMapped)
							{
								if(JPCDateChecker.isFutureDate(keyClsYmd, opedate, "0"))
								{
									// 鍵閉め年月日が運用日より未来の場合
									// 状態：「鍵閉め予約中」
									// 予約適用年月日：鍵閉め年月日
									subbean.sendMessageString(KKW22801SFConst.STAT_01, X31CWebConst.DATABEAN_SET_VALUE, RSV_UNLOCKED);
									subbean.sendMessageString(KKW22801SFConst.RSV_APL_YMD_01, X31CWebConst.DATABEAN_SET_VALUE, JPCUtilCommon.formatDate(keyClsYmd));
									isMapped = true;
								}
							}	
							if(!isMapped)
							{
								// 予約中ではない場合
								// 状態：スカパー連携ステータス名称
								// 予約適用年月日：空白
								subbean.sendMessageString(KKW22801SFConst.STAT_01, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("sptv_rnk_stat_nm"));
								subbean.sendMessageString(KKW22801SFConst.RSV_APL_YMD_01, X31CWebConst.DATABEAN_SET_VALUE, "");
							}
						} else {
							subbean.sendMessageString(KKW22801SFConst.STAT_01, X31CWebConst.DATABEAN_SET_VALUE, new String());
							subbean.sendMessageString(KKW22801SFConst.RSV_APL_YMD_01, X31CWebConst.DATABEAN_SET_VALUE, new String());
						}
						if (childMap != null) {
							subbean.sendMessageString(KKW22801SFConst.SPTV_RNK_STAT_01, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("sptv_rnk_stat"));
						} else {
							subbean.sendMessageString(KKW22801SFConst.SPTV_RNK_STAT_01, X31CWebConst.DATABEAN_SET_VALUE, new String());
						}
						if (childMap != null) {
							subbean.sendMessageString(KKW22801SFConst.SPTV_RNK_STAT_NM_01, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("sptv_rnk_stat_nm"));
							subbean.sendMessageString(KKW22801SFConst.OPSVKEI_UM_FLG_01, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("opsvkei_um_flg"));
						} else {
							subbean.sendMessageString(KKW22801SFConst.SPTV_RNK_STAT_NM_01, X31CWebConst.DATABEAN_SET_VALUE, new String());
							subbean.sendMessageString(KKW22801SFConst.OPSVKEI_UM_FLG_01, X31CWebConst.DATABEAN_SET_VALUE, new String());
						}
					}
				}

			}
		}
		
		return bean;
	}
}
