/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0302_FUSV0302OPDBMapper
*	ソースファイル名：FUSV0302_FUSV0302OPDBMapper.java
*	作成者			：FJ
*	日付			：2017年01月24日
*＜機能概要＞
*	BP（支払方法入力チェック(量販・訪販)）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v29.00.00   2017/01/24  FJ)謝      【ANK-3112-00-00】訪販チャネルのタブレット対応 新規作成
*   v36.00      2017/12/01  FJ)岡井    【ANK-3313-00-00】クレジットカード非通過対応
*   v39.00.00   2018/11/06  FJ)黒田(耕)【ANK-3518-00-00】量販・訪販Webのサービス追加
*   v58.00.00   2022/05/16  FJ) 新谷   【ANK-3846-00-00】【クレカ】クリアパス→ペイジェント移行
*
**********************************************************************/
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.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW00945SF.FUW00945SFConst;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class FUSV0302_FUSV0302OPDBMapper {
	
	/** 姓と名の区切り文字 */
	private static final String NAMAE_KUGIRI = "　";
	
	/** クレジット・名義人種別（異なるフラグ）サービス用 */
	private static final String MEIGININ_SBT_DIFF = "1";
	
	/**
	 * コンストラクタ
	 */
	public FUSV0302_FUSV0302OPDBMapper(){
	}
	

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：お支払い方法入力（量販・訪販）　[1]：共有フォームビーン
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV030201SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 2){
			return null;
		}
		
		// 支払方法選択
		String payway = bean[0].sendMessageString(FUW00945SFConst.PAYWAY, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 共有フォームBean.ＷＥＢ新規情報を取得する
		X31SDataBeanAccessArray beanArray = bean[1].getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewBean = beanArray.getDataBean(0);
		
		// 支払方法選択がクレジット以外の場合は呼び出さない
		if (!(JFUStrConst.PAYWAY_CREDIT.equals(payway)))
		{
			return null;
		}
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// クレジットカード会社コード → クレジット請求手続きSCマップ.クレジットカード会社コード
		//parentMap.put("crecard_comp_cd", bean[0].sendMessageString("クレジットカード会社コード", X31CWebConst.DATABEAN_GET_VALUE));
		// チェックNG回避の為、「00001」を設定しておく
		parentMap.put("crecard_comp_cd", "00001");
		
		// クレジットカード番号１+２+３+４ → クレジット請求手続きSCマップ.クレジットカード番号
//		String cre_no_1 = bean[0].sendMessageString("クレジットカード番号１", X31CWebConst.DATABEAN_GET_VALUE);
//		String cre_no_2 = bean[0].sendMessageString("クレジットカード番号２", X31CWebConst.DATABEAN_GET_VALUE);
//		String cre_no_3 = bean[0].sendMessageString("クレジットカード番号３", X31CWebConst.DATABEAN_GET_VALUE);
//		String cre_no_4 = bean[0].sendMessageString("クレジットカード番号４", X31CWebConst.DATABEAN_GET_VALUE);
//		String cre_no_1234 = cre_no_1 + cre_no_2 + cre_no_3 + cre_no_4;

		// チェックNG回避の為、「0000000000000000」を設定しておく
		parentMap.put("crecard_no", "0000000000000000");
		
		// カード有効期限（年月） → クレジット請求手続きSCマップ.クレジットカード有効期限
		String year = bean[0].sendMessageString("カード有効期限（年）", X31CWebConst.DATABEAN_GET_VALUE);
		String month = bean[0].sendMessageString("カード有効期限（月）", X31CWebConst.DATABEAN_GET_VALUE);
		
		// 年月を文字に結合する関係で 1-9月だけは頭に 0 を付加する
		if (month.matches("^[1-9]$"))
		{
			month = "0" + month;
		}
		String year_month = year + month;
		parentMap.put("crecard_yk_kigen", year_month);
		
		// カード名義人選択
		String cust_nm_flag = bean[0].sendMessageString(FUW00945SFConst.CUST_NM_SLCT, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 名義人が契約者と異なる場合
		if (MEIGININ_SBT_DIFF.compareTo(cust_nm_flag) == 0)
		{
			// 契約種別
			String kei_sbt = webNewBean.sendMessageString(CommonInfoCFConst.KEI_SBT_06, X31CWebConst.DATABEAN_GET_VALUE);
			String kana_name = "";
			
			// 個人契約の場合
			if (JFUStrConst.KEI_SBT_KOJINCD.equals(kei_sbt))
			{
				// カード名義人（カナ・姓）+（カナ・名） → クレジット請求手続きSCマップ.クレジットカード名義カナ名
				String kana_sei = bean[0].sendMessageString(FUW00945SFConst.CUST_NM_KANA_SEI, X31CWebConst.DATABEAN_GET_VALUE);
				String kana_mei = bean[0].sendMessageString(FUW00945SFConst.CUST_NM_KANA_NM, X31CWebConst.DATABEAN_GET_VALUE);
				kana_name = String.format("%s%s%s", kana_sei, NAMAE_KUGIRI, kana_mei);
			}
			else if (JFUStrConst.KEI_SBT_HOJINCD.equals(kei_sbt))
			{
				// カード名義人（カナ） → クレジット請求手続きSCマップ.クレジットカード名義カナ名
				kana_name = bean[0].sendMessageString(FUW00945SFConst.CUST_NM_KANA, X31CWebConst.DATABEAN_GET_VALUE);
			}
			parentMap.put("crecard_nm_kana", kana_name);
		}
		
		// 異動区分 → クレジット請求手続きSCマップ.異動区分
		parentMap.put("ido_div", bean[0].sendMessageString("異動区分", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("FUSV030201SC", parentMap);
						
		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：お支払い方法入力（量販・訪販）　[1]：共有フォームビーン
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV030202SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 2){
			return null;
		}

		// 共有フォームBean.ＷＥＢ新規情報を取得する
		X31SDataBeanAccessArray beanArray = bean[1].getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewBean = beanArray.getDataBean(0);
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 共有フォームBean.ＷＥＢ新規[0].ｓｙｓＩＤ → 請求契約登録SCマップ.SYSID
		parentMap.put("sysid", webNewBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE));
		// 請求方法コード → 請求契約登録SCマップ.請求方法コード
		parentMap.put("seiky_way_cd", bean[0].sendMessageString("請求方法コード", X31CWebConst.DATABEAN_GET_VALUE));
		// 異動区分 → 請求契約登録SCマップ.異動区分
		parentMap.put("ido_div", bean[0].sendMessageString("異動区分", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("FUSV030202SC", parentMap);
						
		return outputMap;
	}

// ANK-3518-00-00 ADD START
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：お支払い方法入力（量販・訪販）　[1]：共有フォームビーン
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV030203SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 2){
			return null;
		}

		String tradCode = bean[0].sendMessageString("取扱コード", X31CWebConst.DATABEAN_GET_VALUE);

		if ("".equals(tradCode))
		{
			// 取扱コードがブランクの場合は処理を行わない。
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 取扱コード → 代理店一意照会ＳＣマップ.ＫＥＹ＿代理店コード
		parentMap.put("key_agnt_cd", bean[0].sendMessageString("取扱コード", X31CWebConst.DATABEAN_GET_VALUE));
		// 運用日付（日付） → 代理店一意照会ＳＣマップ.ＫＥＹ＿予約適用年月日
		parentMap.put("key_rsv_aply_ymd", bean[0].sendMessageString("運用日付（日付）", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("FUSV030203SC", parentMap);
						
		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：お支払い方法入力（量販・訪販）　[1]：共有フォームビーン
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV030204SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 2){
			return null;
		}
		X31SDataBeanAccess web_new_bean = null; // 共有フォームBeanのＷＥＢ新規以下へのアクセサ
		X31SDataBeanAccessArray bean_array = null;

		bean_array = bean[1].getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		web_new_bean = bean_array.getDataBean(0);

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 共有フォームBean.ＷＥＢ新規[0].ｓｙｓＩＤ → 現督促ステータス照会SCマップ.ＫＥＹ＿ＳＹＳＩＤ
		parentMap.put("key_sysid", web_new_bean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE));
		// 請求契約番号 → 現督促ステータス照会ＳＣマップ.ＫＥＹ＿請求契約番号
		parentMap.put("key_seiky_kei_no", bean[0].sendMessageString("請求契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		// 運用日付（日付） → 現督促ステータス照会SCマップ.ＫＥＹ＿予約適用年月日
		parentMap.put("key_rsv_aply_ymd", bean[0].sendMessageString("運用日付（日付）", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("FUSV030204SC", parentMap);
						
		return outputMap;
	}


	/**
	 * 下りマッピング
	 * @param bean　[0]：お支払い方法入力（量販・訪販）　[1]：共有フォームビーン
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV030203SC(X31SDataBeanAccess[] bean, HashMap outputMap){

		HashMap parentMap = null;
		if(outputMap.containsKey("FUSV030203SC")){
			parentMap = (HashMap)outputMap.get("FUSV030203SC");
		}

		ArrayList childList = null;
		

		X31SDataBeanAccessArray listFUSV030203SC_agnt_info_EKK0061A010CBSMsg1List = bean[0].getDataBeanArray("代理店情報");
		childList = null;
		if(listFUSV030203SC_agnt_info_EKK0061A010CBSMsg1List != null && parentMap != null && parentMap.containsKey("EKK0061A010CBSMsg1List")){
			childList = (ArrayList)parentMap.get("EKK0061A010CBSMsg1List");

			for(int i = 0; i < childList.size(); i++){
				X31SDataBeanAccess subbean = null;
				if(listFUSV030203SC_agnt_info_EKK0061A010CBSMsg1List.getCount() -1 >= i){
					subbean = listFUSV030203SC_agnt_info_EKK0061A010CBSMsg1List.getDataBean(i);
				}else{
					subbean = listFUSV030203SC_agnt_info_EKK0061A010CBSMsg1List.addDataBean();
				}
				HashMap childMap = (HashMap)childList.get(i);
				if (subbean == null) {
					continue;
				}
			
				// 代理店情報.代理店コード ← 代理店一意照会ＳＣマップ.代理店一意照会明細.代理店コード
				if (childMap != null) {
					subbean.sendMessageString("代理店コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("agnt_cd"));
				} else {
					subbean.sendMessageString("代理店コード", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
			}
		}


		return bean;
	}

	/**
	 * 下りマッピング
	 * @param bean　[0]：お支払い方法入力（量販・訪販）　[1]：共有フォームビーン
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getFUSV030204SC(X31SDataBeanAccess[] bean, HashMap outputMap){

		HashMap parentMap = null;
		if(outputMap.containsKey("FUSV030204SC")){
			parentMap = (HashMap)outputMap.get("FUSV030204SC");
		}

		ArrayList childList = null;
		

		X31SDataBeanAccessArray listFUSV030204SC_gen_tokusoku_stat_list_EKK0491B506CBSMsg1List = bean[0].getDataBeanArray("現督促ステータスリスト");
		childList = null;
		if(listFUSV030204SC_gen_tokusoku_stat_list_EKK0491B506CBSMsg1List != null && parentMap != null && parentMap.containsKey("EKK0491B506CBSMsg1List")){
			childList = (ArrayList)parentMap.get("EKK0491B506CBSMsg1List");

			for(int i = 0; i < childList.size(); i++){
				X31SDataBeanAccess subbean = null;
				if(listFUSV030204SC_gen_tokusoku_stat_list_EKK0491B506CBSMsg1List.getCount() -1 >= i){
					subbean = listFUSV030204SC_gen_tokusoku_stat_list_EKK0491B506CBSMsg1List.getDataBean(i);
				}else{
					subbean = listFUSV030204SC_gen_tokusoku_stat_list_EKK0491B506CBSMsg1List.addDataBean();
				}
				HashMap childMap = (HashMap)childList.get(i);
				if (subbean == null) {
					continue;
				}
				
				// 督促データが取得できない場合に、値を初期化していない問題の解決
				if (childMap == null || childMap.get("seiky_kei_no") == null)
				{
					listFUSV030204SC_gen_tokusoku_stat_list_EKK0491B506CBSMsg1List.clearArray();
					continue;
				}
			
				// 現督促ステータスリスト.請求契約番号 ← 現督促ステータス照会ＳＣマップ.現督促ステータス一覧照会明細.請求契約番号
				if (childMap != null) {
					subbean.sendMessageString("請求契約番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_kei_no"));
				} else {
					subbean.sendMessageString("請求契約番号", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// 現督促ステータスリスト.督促ステータス ← 現督促ステータス照会ＳＣマップ.現督促ステータス一覧照会明細.督促ステータス
				if (childMap != null) {
					subbean.sendMessageString("督促ステータス", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("tokusoku_stat"));
				} else {
					subbean.sendMessageString("督促ステータス", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
			}
		}


		return bean;
	}

// ANK-3518-00-00 ADD END


}