/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：FUSV0034_FUSV0034OPDBMapper
*	ソースファイル名：FUSV0034_FUSV0034OPDBMapper.java
*	作成者			：FJ
*	日付			：2011年12月06日
*＜機能概要＞
*	BP（eo光電話オプションサービス申込解約(回復)）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/12/06	FJ)			新規作成
*   v4.00       2012/09/29	FJ)美濃原  	【ANK-1163-00-00】変更系申込が可能となるタイミングについて
*	v4.00		2012/10/09	FJ)西村		【ANK-1223-00-00】 進捗補足事項編集対応
**********************************************************************/
package eo.web.webview.mapping;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JFUStrConst;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.FUW05401SF.FUW05401SFConst;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;

/**
 * DataBean-BPマッピングをします。
 *
 * <br>
 * @author 富士通
 */
public class FUSV0034_FUSV0034OPDBMapper
{

	/** 更新年月日時分秒 */
	private static final String UPD_DTM_BF = "upd_dtm_bf";

	/** BEANの必須レコード数 [0]：共有フォームビーン　[1]：ｅｏ光電話オプションサービス申込解約 */
	private static final int BEAN_LENGTH = 2;

	/** 機能コード */
	private static final String FUNC_CODE = "func_code";

	/** eo光電話オプションサービス申込解約(回復)作業項目マップ01 */
	private static final String FUSV0034_W_O_R_K01 = "FUSV0034WORK01";
	/** 050オプション電話処理フラグ */
	private static final String N_050_OP_TELNO_TRAN_FLG = "n_050_op_telno_tran_flg";
	/** オプション処理フラグ */
	private static final String OP_TRAN_FLG = "op_tran_flg";
	/** サブオプション処理フラグ */
	private static final String SBOP_TRAN_FLG = "sbop_tran_flg";
	/** サービスオーダ処理フラグ */
	private static final String SOD_TRAN_FLG = "sod_tran_flg";

	/** エイジング種別コード */
	private static final String AGING_SBT_CD = "aging_sbt_cd";
	/** エイジング対象値 */
	private static final String AGING_TG_VALUE = "aging_tg_value";

	/** SYSID */
	private static final String SYSID = "sysid";

	/** オプションサービス契約番号 */
	private static final String OP_SVC_KEI_NO = "op_svc_kei_no";
	/** サービス契約番号 */
	private static final String SVC_KEI_NO = "svc_kei_no";
	/** サブオプションサービス契約番号 */
	private static final String SBOP_SVC_KEI_NO = "sbop_svc_kei_no";

	/** オプションサービス契約回復 */
	private static final String KAIHK_OPSVCKEI_MAP = "kaihkOpsvckeiMap";
	/** エイジング情報リスト */
	private static final String AGING_INFO_LIST = "aging_info_list";
	/** 回復年月日 */
	private static final String KAIHK_YMD = "kaihk_ymd";

	
	/** 異動区分 */
	private static final String IDO_DIV = "ido_div";
	/** 異動理由コード */
	private static final String IDO_RSN_CD = "ido_rsn_cd";
	/** 異動理由明細 */
	private static final String EKK1091_D010_C_B_S_MSG1_LIST = "EKK1091D010CBSMsg1List";

	/** 進捗特記事項1 */
	private static final String PRG_TKJK_1 = "prg_tkjk_1";
	/** 特記事項１要素を取得する際のid */
	private static final String PRGADD_ID = "0";
	/** 進捗特記事項(置き換え文字列1) */
	private static final String TKJK_1 = "%0%";
	/** フォーマット変換（3桁、先頭0埋め） */
	private static final String FORMAT_1 = "%1$03d";

	/**
	 * コンストラクタです。
	 */
	public FUSV0034_FUSV0034OPDBMapper()
	{
	}

	/**
	 * 上りマッピングを行います。
	 * @param bean　[0]：共有フォームビーン　[1]：ｅｏ光電話オプションサービス申込解約
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return HashMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV0034WORK01(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{

		if (bean == null)
		{
			return null;
		}

		if (bean.length != BEAN_LENGTH)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// ０５０オプション電話処理フラグ → eo光電話オプションサービス申込解約（回復）作業項目マップ01.050オプション電話処理フラグ
		parentMap.put(N_050_OP_TELNO_TRAN_FLG, bean[1].sendMessageString(FUW05401SFConst.N_050_OP_TELNO_TRAN_FLG, X31CWebConst.DATABEAN_GET_VALUE));
		// オプション処理フラグ → eo光電話オプションサービス申込解約（回復）作業項目マップ01.オプション処理フラグ
		parentMap.put(OP_TRAN_FLG, bean[1].sendMessageString(FUW05401SFConst.OP_TRAN_FLG, X31CWebConst.DATABEAN_GET_VALUE));
		// サブオプション処理フラグ → eo光電話オプションサービス申込解約（回復）作業項目マップ01.サブオプション処理フラグ
		parentMap.put(SBOP_TRAN_FLG, bean[1].sendMessageString(FUW05401SFConst.SBOP_TRAN_FLG, X31CWebConst.DATABEAN_GET_VALUE));
		// サービスオーダ処理フラグ → eo光電話オプションサービス申込解約（回復）作業項目マップ01.サービスオーダ処理フラグ
		parentMap.put(SOD_TRAN_FLG, bean[1].sendMessageString(FUW05401SFConst.SOD_TRAN_FLG, X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put(FUSV0034_W_O_R_K01, parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：共有フォームビーン　[1]：ｅｏ光電話オプションサービス申込解約
	 * @param outputMap
	 * @param func_code　機能コード
	 * @param opeDate 回復年月日
	 * @param lastUpdDtm 最終更新年月日時分秒(回復可能)
	 * @return HashMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setFUSV003403CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code, String opeDate, String lastUpdDtm) 
	{
		
		if (bean == null)
		{
			return null;
		}

		if (bean.length != BEAN_LENGTH)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put(FUNC_CODE, func_code);

		// sysid → オプションサービス契約回復共通部品マップ.ＳＹＳＩＤ
		parentMap.put(SYSID, bean[1].sendMessageString(FUW05401SFConst.SYSID, X31CWebConst.DATABEAN_GET_VALUE));

		// svc_kei_no → オプションサービス契約回復共通部品マップ.サービス契約番号
		parentMap.put(SVC_KEI_NO, bean[1].sendMessageString(FUW05401SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		// op_svc_kei_no → オプションサービス契約回復共通部品マップ.オプションサービス契約番号
		parentMap.put(OP_SVC_KEI_NO, bean[1].sendMessageString(FUW05401SFConst.OP_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));

		// lastUpdDtm → オプションサービス契約回復共通部品マップ.更新年月日時分秒
		parentMap.put(UPD_DTM_BF, lastUpdDtm);

		String opTrnFlg = bean[1].sendMessageString(FUW05401SFConst.OP_TRAN_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		// 親のオプションからの回復時は、サブオプションサービス契約番号をセットしない。
		if (!JFUStrConst.CD00001_1.equals(opTrnFlg))
		{
		// sbop_svc_kei_no → オプションサービス契約回復共通部品マップ.サブオプションサービス契約番号
			parentMap.put(SBOP_SVC_KEI_NO, bean[1].sendMessageString(FUW05401SFConst.SBOP_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
		} 

		// 異動区分
		parentMap.put(IDO_DIV, JFUStrConst.CD00576_00031);

		// 回復年月日
		parentMap.put(KAIHK_YMD, opeDate);

		// エイジング情報リスト
		ArrayList<HashMap<String, Object>> agingList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> agingMap = new HashMap<String, Object>();

		String n050OpTelNo = bean[1].sendMessageString(FUW05401SFConst.N_050_OP_TELNO, X31CWebConst.DATABEAN_GET_VALUE);
		// ０５０オプション電話番号 → オプションサービス契約回復共通部品マップ.エイジング情報リスト.エイジング対象値
		if (!JFUStrConst.EMPTY.equals(n050OpTelNo))
		{
			agingMap.put(AGING_SBT_CD, JFUStrConst.CD00412_001);
			agingMap.put(AGING_TG_VALUE, n050OpTelNo);
			agingList.add(agingMap);
			parentMap.put(AGING_INFO_LIST, agingList);
		}

		// 進捗特記事項1
		try
		{
			// ○WEB変更情報
			X31SDataBeanAccess webChgInfoBean = bean[0].getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);

			// ○現顧客情報
			X31SDataBeanAccess genCustKeiInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO).getDataBean(0);
			// ○サービス契約情報
			X31SDataBeanAccess svcKeiInfoBean = genCustKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO).getDataBean(0);
			// ○サービス契約内訳情報
			X31SDataBeanAccess svcKeiUcwkInfoBean = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_UCWK_INFO).getDataBean(0);
			
			String op_svc_cd = JFUWebCommon.getDataBeanItemByPath(bean[1], FUW05401SFConst.OP_SVC_CD);//オプションサービスコード
			String sbop_svc_cd = JFUWebCommon.getDataBeanItemByPath(bean[1], FUW05401SFConst.SBOP_SVC_CD);//サブオプションサービスコード
			
			String telNoJun = svcKeiUcwkInfoBean.sendMessageString(CommonInfoCFConst.TELNO_JUN_24, X31CWebConst.DATABEAN_GET_VALUE);//電話番号順
			telNoJun = String.format(FORMAT_1, Integer.parseInt(telNoJun));

			String prgTkjk1 = JFUStrConst.EMPTY;
			if(JFUStrConst.CD00136_B023.equals(op_svc_cd))//割込電話
			{
					prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW05402, PRGADD_ID);
			}
			else if(JFUStrConst.CD00136_B024.equals(op_svc_cd))//転送電話
			{
				if(JFUStrConst.CD00137_D07.equals(sbop_svc_cd))
				{
					prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW05602, PRGADD_ID);// 転送電話選択(転送電話のサブ)
				}
				else
				{
					prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW05502, PRGADD_ID);//転送電話
				}
			}
			else if(JFUStrConst.CD00136_B025.equals(op_svc_cd))//発信者番号表示
			{
				if(JFUStrConst.CD00137_D08.equals(sbop_svc_cd))
				{
					prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW05802, PRGADD_ID);// 非通知着信拒否(発信者番号表示のサブ)
				}
				else
				{
					prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW05702, PRGADD_ID);//発信者番号表示
				}
			}
			else if(JFUStrConst.CD00136_B026.equals(op_svc_cd))//迷惑電話拒否
			{
				prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW05902, PRGADD_ID);
			}
			else if(JFUStrConst.CD00136_B027.equals(op_svc_cd))//指定番号着信選択
			{
				prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW06002, PRGADD_ID);
			}
			else if(JFUStrConst.CD00136_B028.equals(op_svc_cd))//通話明細送付
			{
				prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW06102, PRGADD_ID);
			}
			else if(JFUStrConst.CD00136_B029.equals(op_svc_cd))//050ナンバープラス
			{
				prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW06202, PRGADD_ID);
			}
			else if(JFUStrConst.CD00136_B071.equals(op_svc_cd))//国際電話利用停止
			{
				prgTkjk1 = JFUWebCommon.getPrgAddTkjkFst(JFUScreenConst.SCREEN_ID_FUW10302, PRGADD_ID);
			}
			
				prgTkjk1 = prgTkjk1.replace(TKJK_1, telNoJun);
			
			if(prgTkjk1 != null && prgTkjk1.length() > 0)
			{
				parentMap.put(PRG_TKJK_1, prgTkjk1);
			}
			else
			{
				DEBUG_LOG.debug("※進捗特記事項1がXMLから正常に取得できませんでした。処理は続行します。");
			}
		}
		catch (Exception e)
		{
			DEBUG_LOG.debug("※進捗特記事項1がXMLから正常に取得できませんでした。処理は続行します。");
		}

		
		//異動理由明細
		ArrayList<HashMap<String, Object>> idoList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> idoMap = new HashMap<String, Object>();
		idoMap.put(IDO_RSN_CD, JFUStrConst.CD00846_56);

		idoList.add(idoMap);
		parentMap.put(EKK1091_D010_C_B_S_MSG1_LIST, idoList);

		outputMap.put(KAIHK_OPSVCKEI_MAP, parentMap);

		return outputMap;
	}

}