/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbEKK1071C131Edit
*	ソースファイル名：JKKejbEKK1071C131Edit.java
*	作成者			：富士通
*	日付			：2011年10月17日
*＜機能概要＞
*	記載不備機器サービス契約情報審査クラス
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/10/17	富士通		新規作成
*
**********************************************************************/

package eo.ejb.common.edit;

import java.util.ArrayList;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK1981ETMsg;
import eo.ejb.cbs.cbsmsg.EKK1071C131CBSMsg;
import eo.ejb.common.JKKModelCommon;

/**
 * <p>
 * 記載不備機器サービス契約情報審査クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbEKK1071C131Edit
{

	/** 審査詳細種別コード(機器在庫チェック) */
	private static final String JGE_DTL_SBT_CD_022 = "022";
	
	/** 審査詳細種別コード(接続機器数チェック) */
	private static final String JGE_DTL_SBT_CD_023 = "023";
	
	/** 審査詳細種別コード(機器在庫チェック) */
	private static final String JGE_DTL_SBT_CD_024 = "024";

	/** 審査対象画面タブコード(機器送付先住所不備チェック) : ネット */
	private static final String JUDGE_TG_SCREEN_TAB_CD_NET = "07";
	
	/** 審査対象画面タブコード(機器送付先住所不備チェック) : テレビ */
	private static final String JUDGE_TG_SCREEN_TAB_CD_TV = "10";
	
	/** 審査対象画面タブコード(機器送付先住所不備チェック) : モバイル */
	private static final String JUDGE_TG_SCREEN_TAB_CD_MOBAIL = "11";
	
	/** 審査対象画面項目コード(機器送付先住所不備チェック) : 機器詳細情報*/
	private static final String UDGE_TG_SCREEN_KMK_CD = "009";
	
	/** 料金グループコード(eo光ネットホームタイプ) */
	private static final String PRC_GRP_CD_02 = "02";
	
	/** 料金グループコード(eo光ネットメゾンタイプ) */
	private static final String PRC_GRP_CD_03 = "03";
	
	/** 料金グループコード(eo光ネットマンションタイプ) */
	private static final String PRC_GRP_CD_04 = "04";
	
	/** 料金グループコード(eoモバイル(Wi-Fi)) */
	private static final String PRC_GRP_CD_07 = "07";
	
	/** 料金グループコード(eoモバイル(EM)) */
	private static final String PRC_GRP_CD_08 = "08";

	/** 料金グループコード(eoモバイル(UQ-WiMAX)) */
	private static final String PRC_GRP_CD_09 = "09";
	
	/** 料金グループコード(eo光テレビ(K-CAT)) */
	private static final String PRC_GRP_CD_11 = "11";
	
	/** 料金グループコード(eo光テレビ(KCN)) */
	private static final String PRC_GRP_CD_12 = "12";
	
	/** 料金グループコード(eo光テレビ(再送信)) */
	private static final String PRC_GRP_CD_13 = "13";
	
	/** 審査詳細メッセージID(機器在庫チェック) */
	private static final String JDG_DTL_MSG_ID_022 = "EKB8060--I";
	
	/** 審査詳細メッセージID(接続機器数チェック) */
	private static final String JDG_DTL_MSG_ID_023 = "EKB8070--I";
	
	/** 審査詳細メッセージID(機器管理チェック) */
	private static final String JDG_DTL_MSG_ID_024 = "EKB8080--I";
	
	/** 埋め込み区切り文字 */
	private static final String UME_APD = "、";
	
	/**
	 * コンストラクタです。
	 */
	public JKKejbEKK1071C131Edit()
	{
	}

	/**
	 * <p>
	 * 記載不備機器サービス契約情報審査チェック処理を行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 審査チェック処理の結果
	 */
	public Object getKshbiOkForKikiChkRslt(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		// 審査チェック処理部品
		JKKejbKK1071Edit kk1071 = new JKKejbKK1071Edit();

		// 審査.審査結果コード設定用
		String[] jdg_result = new String[3];

		// チェックの実施判定を行う
		String errResult = kk1071.getErrRsltKK1831(inMsg, inMsg.getString(EKK1071C131CBSMsg.JDG_JSSI_KINO_SKBT_CD), JGE_DTL_SBT_CD_022);
		if(errResult != null)
		{
			// 機器在庫チェックの実施
			//引数設定
			CAANMsg[] kikiList = inMsg.getCAANMsgList(EKK1071C131CBSMsg.EKK1071C131CBSMSG1LIST);
			CAANMsg[] zaikoList = inMsg.getCAANMsgList(EKK1071C131CBSMsg.EKK1071C131CBSMSG2LIST);

			ArrayList<String> result = kk1071.kikiZaikoCheck(inMsg, kikiList, zaikoList);
			if(result.size() > 0)
			{	
				createIsKshbiOkForKiki(inMsg, inContext, errResult, JGE_DTL_SBT_CD_022, JDG_DTL_MSG_ID_022, result);
				jdg_result[0] = errResult;
			}
		}
		
		// チェックの実施判定を行う
		String errResult2 = kk1071.getErrRsltKK1831(inMsg, inMsg.getString(EKK1071C131CBSMsg.JDG_JSSI_KINO_SKBT_CD), JGE_DTL_SBT_CD_023);

		if(errResult2 != null)
		{
			// 接続機器数チェックの実施
			//引数設定
			CAANMsg[] kikiList = inMsg.getCAANMsgList(EKK1071C131CBSMsg.EKK1071C131CBSMSG1LIST);
			String pcrsCd = inMsg.getString(EKK1071C131CBSMsg.PCRS_CD);
			ArrayList<String> result2 = kk1071.setsuzokuKikiCheck(inMsg, kikiList, pcrsCd);
			if(result2.size() > 0)
			{	
				createIsKshbiOkForKiki(inMsg, inContext, errResult2, JGE_DTL_SBT_CD_023, JDG_DTL_MSG_ID_023, result2);
				jdg_result[1] = errResult2;
			}
		}
		
		// チェックの実施判定を行う
		String errResult3 = kk1071.getErrRsltKK1831(inMsg, inMsg.getString(EKK1071C131CBSMsg.JDG_JSSI_KINO_SKBT_CD), JGE_DTL_SBT_CD_024);

		if(errResult3 != null)
		{
			// 機器管理チェックの実施
			//引数設定
			CAANMsg[] kikiList = inMsg.getCAANMsgList(EKK1071C131CBSMsg.EKK1071C131CBSMSG1LIST);
			CAANMsg[] macAdList = inMsg.getCAANMsgList(EKK1071C131CBSMsg.EKK1071C131CBSMSG3LIST);
			String pcrsCd = inMsg.getString(EKK1071C131CBSMsg.PCRS_CD);
			ArrayList<String> result3 = kk1071.kikiKanriCheck(inMsg, kikiList, macAdList, pcrsCd);
			if(result3.size() > 0)
			{	
				createIsKshbiOkForKiki(inMsg, inContext, errResult3, JGE_DTL_SBT_CD_024, JDG_DTL_MSG_ID_024, result3);
				jdg_result[2] = errResult3;
			}
		}
		
		return kk1071.getJudgeJudgeRsltCd(jdg_result);
	}
	
	/**
	 * <p>
	 * 審査詳細の登録を行います（住所不備機器サービス契約情報審査チェック）。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param errRsltCd エラー結果コード
	 * @param jgeDtlSbtCd 審査詳細種別コード
	 * @param msgId メッセージID
	 * @param msgUmkmMoji メッセージ埋め込み文字のリスト
	 */
	public void createIsKshbiOkForKiki(CAANMsg inMsg, AgentDispatchContext inContext, String errRsltCd, String jgeDtlSbtCd, String msgId,
			ArrayList<String> msgUmkmMoji)
	{
		// 審査詳細の登録用のメッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK1981ETMsg.class.getName());

		inETMsg.set(KK1981ETMsg.JUDGE_NO, inMsg.getString(EKK1071C131CBSMsg.JUDGE_NO));
		inETMsg.set(KK1981ETMsg.JDG_DTL_SBT_CD, jgeDtlSbtCd);
		// 審査対象画面タブコード判定を行う
		String rkgroupCd = inMsg.getString(EKK1071C131CBSMsg.PRC_GRP_CD);
		
		if(PRC_GRP_CD_02.equals(rkgroupCd) || PRC_GRP_CD_03.equals(rkgroupCd) || PRC_GRP_CD_04.equals(rkgroupCd))
		{
			inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_TAB_CD, JUDGE_TG_SCREEN_TAB_CD_NET);
		}
		else if(PRC_GRP_CD_07.equals(rkgroupCd) || PRC_GRP_CD_08.equals(rkgroupCd) || PRC_GRP_CD_09.equals(rkgroupCd))
		{
			inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_TAB_CD, JUDGE_TG_SCREEN_TAB_CD_MOBAIL);
		}
		else if(PRC_GRP_CD_11.equals(rkgroupCd) || PRC_GRP_CD_12.equals(rkgroupCd) || PRC_GRP_CD_13.equals(rkgroupCd))
		{
			inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_TAB_CD, JUDGE_TG_SCREEN_TAB_CD_TV);
		}

		inETMsg.set(KK1981ETMsg.JUDGE_TG_SCREEN_KMK_CD, UDGE_TG_SCREEN_KMK_CD);
		inETMsg.set(KK1981ETMsg.JUDGE_YMD, JKKModelCommon.getOpeDate(inMsg));
		inETMsg.set(KK1981ETMsg.JUDGE_JUDGE_RSLT_CD, errRsltCd);
		inETMsg.set(KK1981ETMsg.JDG_DTL_MSG_ID, msgId);

		StringBuilder bldUmeWord = new StringBuilder(msgUmkmMoji.get(0));
		for (int i = 1; i < msgUmkmMoji.size(); i++)
		{
			bldUmeWord.append(UME_APD);
			bldUmeWord.append(msgUmkmMoji.get(i));
		}

		// 埋め込み文字の設定
		inETMsg.set(KK1981ETMsg.MSG_UMKM_MOJI, bldUmeWord.toString());

		// 登録処理の実施
		boolean createFlg = new JKKejbKK1071Edit().createJudgeDtl(inMsg, inETMsg);

		// PKが重複していた場合は関連制約エラーとする
		if (!createFlg)
		{
			inMsg.set(EKK1071C131CBSMsg.JUDGE_NO_ERR, "EB");
			inMsg.set(EKK1071C131CBSMsg.STATUS, StatusCodes.RELATION_ERR);
		}

	}

}
