package com.fujitsu.futurity.bp.custom.reqchk;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.bp.x21.bpm.common.AbstractCustomReqChk;
import com.fujitsu.futurity.bp.x21.bpm.common.IConditionValue;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.reqchk.exception.ReqChkException;

import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg;

public class JKKSV003308ReqChk extends AbstractCustomReqChk {

	//マンションタイプ（グローバル）の料金コースコード
	private static final String MANS_GLOBAL_PCRS_CDS[] = {
		"A50",
		"A51",
		"A52",
		"A53",
		"A54",
		"A55"	};

	//マンションタイプ（光配線）の料金コースコード
	private static final String MANS_HIKARI_PCRS_CDS[] = {
		"A56",
		"A57"
	};

	//ダイヤルアップ接続用ＶＲ識別コード（グローバル）の業務パラメータキー
	private static final String WORK_GLOBAL_PARAM_ID = "KK_DUPCON_VASCD_GL";

	//ダイヤルアップ接続用ＶＲ識別コード（光配線））の業務パラメータキー
	private static final String WORK_HIKARI_PARAM_ID = "KK_DUPCON_VASCD_HCBL";

	
	/**
	 * カスタム実行判定処理を実装するメソッド
	 */
	@SuppressWarnings("unchecked")
	public boolean checkExecution(IRequestParameterReadOnly irp,
			IConditionValue conditionvalue) throws ReqChkException {
		
		try
		{
			
			HashMap<String, Object> kKSV003302SC;
			ArrayList<HashMap<String, Object>> eKK0081A010CBSMSG1LIST;
			HashMap<String, Object> eKK0081A010CBSMSG1LISTElement;
			String prcCd;
			
			HashMap<String, Object> kKSV003306SC;
			
			//サービス契約一意照会の結果を取得
			kKSV003302SC = (HashMap<String, Object>)irp.getData("KKSV003302SC");
			eKK0081A010CBSMSG1LIST = (ArrayList<HashMap<String, Object>>)kKSV003302SC.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
			eKK0081A010CBSMSG1LISTElement = eKK0081A010CBSMSG1LIST.get(0);
			
			//業務パラメータ一意照会のINを取得
			kKSV003306SC = (HashMap<String, Object>)irp.getData("KKSV003308SC");
			
			//料金コースコードの取得
			prcCd = (String)eKK0081A010CBSMSG1LISTElement.get(EKK0081A010CBSMsg1List.PCRS_CD);
			
			//料金コースコードがマンションタイプ（グローバル）の種別であった場合、
			//ＫＥＹ＿業務パラメータIDのIN項目をダイヤルアップ（マンションタイプ）用に変更する
			for(int i = 0 ; i < MANS_GLOBAL_PCRS_CDS.length ; i++)
			{
				if(MANS_GLOBAL_PCRS_CDS[i].equals(prcCd))
				{
					//ＫＥＹ＿業務パラメータIDをKEI_DUPCON_MANS_TYPEに書き換える
					kKSV003306SC.put(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, WORK_GLOBAL_PARAM_ID);
					return true;
				}
			}
			
			//料金コースコードがマンションタイプ（光配線）の種別であった場合、
			//ＫＥＹ＿業務パラメータIDのIN項目をダイヤルアップ（光配線）用に変更する
			for(int i = 0 ; i < MANS_HIKARI_PCRS_CDS.length ; i++)
			{
				if(MANS_HIKARI_PCRS_CDS[i].equals(prcCd))
				{
					//ＫＥＹ＿業務パラメータIDをKEI_DUPCON_MANS_TYPEに書き換える
					kKSV003306SC.put(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, WORK_HIKARI_PARAM_ID);
					return true;
				}
			}

			return false;
			
		}
		catch (Exception e) {
			return false;
		}
		
	}
	
}
