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.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0371B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371B001CBSMsg1List;

public class JKKSV021112ReqChk  extends AbstractCustomReqChk {

	/**
	 * 電話番号情報登録・光電話・電話番号情報変更の実行判定クラス
	 */
	@SuppressWarnings("unchecked")
	public boolean checkExecution(IRequestParameterReadOnly irp,
			IConditionValue conditionvalue) throws ReqChkException {
		
		//発信者番号通知「有」→「無」変更時
		HashMap<String, Object> kKSV021104SCHash;
		ArrayList<HashMap<String, Object>> ekk0371B001CBSMsg1List;
		HashMap<String, Object> ekk0371B001CBSMsg1ListElement;
		HashMap<String, Object> kKSV021109SCHash;
		boolean isHBTExists;
		HashMap<String, Object> kKSV021117SCHash;
		ArrayList<HashMap<String, Object>> eKK161A010CBSMSG1LIST;
		HashMap<String, Object> eKK161A010CBSMSG1LISTElement;
		String svcKeiStat;

		try{
			
			//サービス契約内訳一意照会結果の取得
			kKSV021117SCHash = (HashMap<String, Object>)irp.getData("KKSV021117SC");
			eKK161A010CBSMSG1LIST = (ArrayList<HashMap<String, Object>>)kKSV021117SCHash.get(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
			eKK161A010CBSMSG1LISTElement = eKK161A010CBSMSG1LIST.get(0);
			
			//内訳のサービス契約ステータスの取得
			svcKeiStat = (String)eKK161A010CBSMSG1LISTElement.get(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT);
			
			//サービス契約ステータスが受付済,照査済の場合は解約しない
			if("010".equals(svcKeiStat) || "020".equals(svcKeiStat))
			{
				return false;
			}
			
			//オプションサービス契約＜電話＞一覧照会結果の取得
			kKSV021104SCHash = (HashMap<String, Object>)irp.getData("KKSV021104SC");
			ekk0371B001CBSMsg1List = (ArrayList<HashMap<String, Object>>)kKSV021104SCHash.get(EKK0371B001CBSMsg.EKK0371B001CBSMSG1LIST);
			
			//画面の結果を取得
			kKSV021109SCHash = (HashMap<String, Object>)irp.getData("KKSV021109SC");
			
			//取得したオプションサービス分だけループ
			isHBTExists = false;
			for(int i = ekk0371B001CBSMsg1List.size()-1 ; i >= 0 ; i--){
				
				String opSvcCd;
				String opSvcKeiStat;
				
				//最新要素取得
				ekk0371B001CBSMsg1ListElement = (HashMap<String, Object>)ekk0371B001CBSMsg1List.get(i);
				
				//オプションサービスコードの取得
				opSvcCd = (String)ekk0371B001CBSMsg1ListElement.get(EKK0371B001CBSMsg1List.OP_SVC_CD);
				
				//オプションサービス契約ステータスを取得
				opSvcKeiStat = (String)ekk0371B001CBSMsg1ListElement.get(EKK0371B001CBSMsg1List.OP_SVC_KEI_STAT);
				
				//オプションサービスコードが"B025"（発信者番号通知）か？
				if("B022".equals(opSvcCd))
				{
					// 最新のオプションサービス契約ステータスが締結済サービス提供中以外の場合は解約対象外
					if (!("030".equals(opSvcKeiStat) || "100".equals(opSvcKeiStat))) {
						isHBTExists = false;
						break;
					} else{
						isHBTExists = true;
						break;
					}
				}
				
			}
			
			//発信者番号通知が加入済みの場合
			if(isHBTExists)
			{
				//画面からは「無」で設定されているか？
				if(kKSV021109SCHash.get("hs_no_tchi").equals("0"))
				{
					//以降のオプションサービスの登録へと向かう
					return true;
				}
			}
			
		}catch (Exception e) {
			return false;
		}
		
		return false;
		
	}

}
