/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：CHSV0088_CHSV0088OPDBMapper
 *	ソースファイル名：CHSV0088_CHSV0088OPDBMapper.java
 *	作成者			：富士通
 *	日付			：2020年04月06日
 *＜機能概要＞
 *	BP（記事登録）へのＤ−Ｂマッピングクラスです。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *   v49.00.00   2020/04/06   FJ)西川     ANK-3785-00-00_解約後転居先情報の管理
 *
 **********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JACStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;

/**
 * DataBean-BPマッピングをする。
 *
 */
public class CHSV0088_CHSV0088OPDBMapper
{

	/** LF改行コード */
	private static final String LINE_LF_SEPARATOR = "\n";

	/** Bean項目和名 */
	private static final String JP_CUST_KANA = "氏名カナ";
	private static final String JP_CUST_NM = "氏名";
	private static final String JP_DSLAFTNKYS_TITLE = "解約後転居先情報（督促）";
	private static final String JP_KIJI = "記事";
	private static final String JP_MITCK_FLG = "未着フラグ";
	private static final String JP_PCD_AF = "郵便番号後";
	private static final String JP_PCD_BF = "郵便番号前";
	private static final String JP_AD = "住所";
	private static final String JP_SEIKY_KEI_NO = "請求契約番号";
	private static final String JP_TELNO = "電話番号";
	private static final String JP_TELNO_SBT = "電話番号種別";
	private static final String JP_UPD_DTM_BF = "更新年月日時分秒(更新前)";
	private static final String JP_YK_KDNSK_NON_FLG = "有効架電先なしフラグ";

	/** BP連携（I/O）の各項目 */
	private static final String FUNC_CODE = "func_code";
	private static final String SEIKY_KEI_NO = "seiky_kei_no";

	/** KK3231 解約転居先情報登録 */
	private static final String GENE_ADD_DTM = "gene_add_dtm";
	private static final String CUST_KANA = "cust_kana";
	private static final String CUST_NM = "cust_nm";
	private static final String TELNO = "telno";
	private static final String TELNO_SBT = "telno_sbt";
	private static final String PCD = "pcd";
	private static final String AD = "ad";
	private static final String MITCK_FLG = "mitck_flg";
	private static final String YK_KDNSK_NON_FLG = "yk_kdnsk_non_flg";
	private static final String KIJI = "kiji";
	private static final String SVC_KEY_JCHDSLAFTNKYSIFCC = "JCHDslAfTnkysIfCC";
	private static final String SVC_LIST_KEY_EKK3231A010 = "EKK3231A010CBSMsg1List";

	/** CH0551 料金対応記録 */
	private static final String PRC_TAIO_USER_ID = "prc_taio_user_id";
	private static final String TITLE = "title";
	private static final String PRC_TAIO_KIROK_SBT_CD = "prc_taio_kirok_sbt_cd";
	private static final String PRC_TAIO_KIROK_SBT_DTL_CD = "prc_taio_kirok_sbt_dtl_cd";
	private static final String TAIORRKI_RENDO_TG_FLG = "taiorrki_rendo_tg_flg";
	private static final String UPD_DTM_BF = "upd_dtm_bf";

	private static final String PRC_TAIO_KIROK_LIST = "prc_taio_kirok_list";

	/**
	 * コンストラクタ
	 */
	public CHSV0088_CHSV0088OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 *
	 * @param bean　[0]：解約後転居先（督促）情報
	 * @param inMap
	 * @param func_code　機能コード
	 */
	public static HashMap<String, Object> setJCHDslAfTnkysIfCC(X31SDataBeanAccess[] bean, HashMap<String, Object> inMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		if (JPCModelConstant.FUNC_CD_1.equals(func_code))
		{
			// EKK3231A010_解約後転居先情報一意照会

			parentMap.put(SEIKY_KEI_NO, bean[0].sendMessageString(JP_SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
			parentMap.put(GENE_ADD_DTM, JACStrConst.KARA_MOJI);
			parentMap.put(CUST_NM, JACStrConst.KARA_MOJI);
			parentMap.put(CUST_KANA, JACStrConst.KARA_MOJI);
			parentMap.put(TELNO, JACStrConst.KARA_MOJI);
			parentMap.put(TELNO_SBT, JACStrConst.KARA_MOJI);
			parentMap.put(PCD, JACStrConst.KARA_MOJI);
			parentMap.put(AD, JACStrConst.KARA_MOJI);
			parentMap.put(MITCK_FLG, JACStrConst.KARA_MOJI);
			parentMap.put(YK_KDNSK_NON_FLG, JACStrConst.KARA_MOJI);
			parentMap.put(KIJI, JACStrConst.KARA_MOJI);
		}
		else if (JPCModelConstant.FUNC_CD_2.equals(func_code))
		{
			// EKK3231C010_解約後転居先情報更新 OR  EKK3231D010_解約後転居先情報登録

			parentMap.put(SEIKY_KEI_NO, bean[0].sendMessageString(JP_SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
			parentMap.put(CUST_NM, bean[0].sendMessageString(JP_CUST_NM, X31CWebConst.DATABEAN_GET_VALUE));
			parentMap.put(CUST_KANA, bean[0].sendMessageString(JP_CUST_KANA, X31CWebConst.DATABEAN_GET_VALUE));
			parentMap.put(TELNO, bean[0].sendMessageString(JP_TELNO, X31CWebConst.DATABEAN_GET_VALUE));
			parentMap.put(TELNO_SBT, bean[0].sendMessageString(JP_TELNO_SBT, X31CWebConst.DATABEAN_GET_VALUE));
			parentMap.put(PCD, bean[0].sendMessageString(JP_PCD_BF, X31CWebConst.DATABEAN_GET_VALUE) + bean[0].sendMessageString(JP_PCD_AF, X31CWebConst.DATABEAN_GET_VALUE));
			parentMap.put(AD, bean[0].sendMessageString(JP_AD, X31CWebConst.DATABEAN_GET_VALUE));

			// "TRUE"が[なし]→有効な送付先がない。／"FALSE"が[あり]　→有効な送付先がある。
			boolean mitckFlg = bean[0].sendMessageBoolean(JP_MITCK_FLG, X31CWebConst.DATABEAN_GET_VALUE);
			if (mitckFlg)
			{
				// "１"が[なし]→有効な送付先がない
				parentMap.put(MITCK_FLG, "1");
			}
			else
			{
				// "0"が[あり]　→有効な送付先がある。
				parentMap.put(MITCK_FLG, "0");

			}

			// "TRUE"が[なし]→有効な架電先がない。／"FALSE"が[あり]　→有効な架電先がある。
			boolean ykKdnskNonFlg = bean[0].sendMessageBoolean(JP_YK_KDNSK_NON_FLG, X31CWebConst.DATABEAN_GET_VALUE);
			if (ykKdnskNonFlg)
			{
				// "１"が[なし]→有効な架電先がない
				parentMap.put(YK_KDNSK_NON_FLG, "1");
			}
			else
			{
				// "0"が[あり]　→有効な架電先がある。
				parentMap.put(YK_KDNSK_NON_FLG, "0");
			}

			parentMap.put(KIJI, delReturnCd(bean[0].sendMessageString(JP_KIJI, X31CWebConst.DATABEAN_GET_VALUE)));

			parentMap.put(UPD_DTM_BF, bean[0].sendMessageString(JP_UPD_DTM_BF, X31CWebConst.DATABEAN_GET_VALUE));
		}
		inMap.put(SVC_KEY_JCHDSLAFTNKYSIFCC, parentMap);

		return inMap;
	}

	/**
	 * 上りマッピングをする
	 *
	 * @param bean　[0]：解約後転居先（督促）情報
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	public static HashMap<String, Object> setPRCTAIOKIROKADDCC(X31SDataBeanAccess[] bean, HashMap<String, Object> inMap, String func_code)
	{
		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();

		HashMap childMap = new HashMap();

		// ユーザＩＤ → 料金対応記録登録マップ.料金対応記録明細リスト.料金対応ユーザＩＤ
		childMap.put(PRC_TAIO_USER_ID, bean[1].sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE));

		// 請求契約番号 → 料金対応記録登録マップ.料金対応記録明細リスト.請求契約番号
		childMap.put(SEIKY_KEI_NO, bean[0].sendMessageString(JP_SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		// 記事登録["137"固定] → 料金対応記録登録マップ.料金対応記録登録リスト.料金対応記録種別コード
		childMap.put(PRC_TAIO_KIROK_SBT_CD, JACStrConst.TKRK_SBT_CUST_CHG);

		// 問合せタイトル["2718"固定] → 料金対応記録登録マップ.料金対応記録登録リスト.料金対応記録詳細分類コード
		childMap.put(PRC_TAIO_KIROK_SBT_DTL_CD, JACStrConst.TKRK_SBTD_DSL_AF_MV_TKSK);

		// 対応記録登録マップ.対応記録登録リスト.タイトル
		childMap.put(TITLE, JP_DSLAFTNKYS_TITLE);

		// 料金対応記録登録情報.記事 → 料金対応記録登録マップ.料金対応記録明細リスト.記事
		childMap.put(KIJI, delReturnCd(bean[0].sendMessageString(JP_KIJI, X31CWebConst.DATABEAN_GET_VALUE)));

		// 料金対応記録登録マップ.料金対応記録明細リスト.対応履歴連動対象フラグ
		childMap.put(TAIORRKI_RENDO_TG_FLG, "0");

		list.add(childMap);

		parentMap.put(PRC_TAIO_KIROK_LIST, list);

		inMap.put(JACStrConst.PRCTAIOKIROKADDCC_MAP_ID, parentMap);

		return inMap;
	}

	/**
	 * 下りマッピング
	 *
	 * @param outputMap 解約後転居先情報一意照会の結果
	 * @param func_code 機能コード
	 */
	public static HashMap<String, Object> getJCHDslAfTnkysIfCC(HashMap outputMap, String func_code)
	{

		if (outputMap != null && outputMap.containsKey(SVC_KEY_JCHDSLAFTNKYSIFCC))
		{
			HashMap parentMap = (HashMap)outputMap.get(SVC_KEY_JCHDSLAFTNKYSIFCC);

			if (parentMap != null && parentMap.containsKey(SVC_LIST_KEY_EKK3231A010))
			{
				ArrayList<HashMap<String, Object>> dslAfTnkysList = (ArrayList<HashMap<String, Object>>)parentMap.get(SVC_LIST_KEY_EKK3231A010);
				for (int i = 0; i < dslAfTnkysList.size(); i++)
				{
					HashMap<String, Object> childMap = dslAfTnkysList.get(i);
					if (childMap != null)
					{
						return childMap;
					}
				}
			}
		}
		return null;
	}

	/**
	 * 改行コード削除
	 * @param val 値
	 * @return 改行コードを半角スペースに変換した値
	 */
	private static String delReturnCd(Object val)
	{
		if (val == null)
		{

			return JACStrConst.KARA_MOJI;
		}
		return val.toString().replaceAll(JACStrConst.LINE_SEPARATOR, JACStrConst.SPACE_1).replaceAll(LINE_LF_SEPARATOR, JACStrConst.SPACE_1);
	}

}