package com.fujitsu.futurity.bp.custom.reqchk;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.bp.custom.common.JCCBPCommon;
import com.fujitsu.futurity.bp.x21.bpm.common.IConditionValue;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.reqchk.exception.ReqChkException;

import eo.common.util.JPCDateUtil;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0371B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0821A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0821A010CBSMsg1List;

public class JKKSV021123ReqChk  extends JKKSV021109ReqChk 
{
	
	/**
	 * 電話番号情報登録・光電話・電話番号情報変更の実行判定クラス
	 */
	@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;
		ArrayList<HashMap<String, Object>> ekk0821A010CBSMsg1List;
		HashMap<String, Object> ekk0821A010CBSMsg1ListElement;
		HashMap<String, Object> KKSV021124SCHash;
		
		boolean isHBTExists;

		try{
			
			//オプションサービス契約＜電話＞一覧照会結果の取得
			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 opSvcEndYmd;
				
				//最新要素取得
				ekk0371B001CBSMsg1ListElement = (HashMap<String, Object>)ekk0371B001CBSMsg1List.get(i);
				
				//オプションサービスコードの取得
				opSvcCd = (String)ekk0371B001CBSMsg1ListElement.get(EKK0371B001CBSMsg1List.OP_SVC_CD);
				String opSvcKeiStat = (String)ekk0371B001CBSMsg1ListElement.get(EKK0371B001CBSMsg1List.OP_SVC_KEI_STAT);
				
				//運用年月日
				String ope_ymd = JCCBPCommon.getOpeDate(null);
				
				//オプションサービスコードが"B025"（発信者番号通知）か？
				if("B022".equals(opSvcCd) && "910".equals(opSvcKeiStat))
				{
					String kaifukuKikan;
					
					opSvcEndYmd = (String)ekk0371B001CBSMsg1ListElement.get(EKK0371B001CBSMsg1List.SVC_ENDYMD);
					
					// そもそも解約していない場合が回復処理しない
					if (opSvcEndYmd == null || "".equals(opSvcEndYmd)) {
						isHBTExists = false;
					} 
					else {
						
						//オプションサービス一意照会結果の取得
						KKSV021124SCHash = (HashMap<String, Object>)irp.getData("KKSV021124SC");
						ekk0821A010CBSMsg1List = (ArrayList<HashMap<String, Object>>)KKSV021124SCHash.get(EKK0821A010CBSMsg.EKK0821A010CBSMSG1LIST);
						
						ekk0821A010CBSMsg1ListElement = (HashMap<String, Object>)ekk0821A010CBSMsg1List.get(0);
						
						// 該当オプションサービスの回復可能期間を取得
						kaifukuKikan = (String)ekk0821A010CBSMsg1ListElement.get(EKK0821A010CBSMsg1List.KAIHK_PSB_PRD);
						
						int kaifukukanoDay = Integer.parseInt(kaifukuKikan);
						
						// 回復可能期間日付
						String kaifukuKanoYmd = JPCDateUtil.addDay(opSvcEndYmd, kaifukukanoDay);
						
						// 回復可能期間内の場合のみTRUE、回復可能期間外の場合がFALSE
						if(kaifukuKanoYmd.compareTo(ope_ymd) >= 0) {
							isHBTExists = true;
							break;
						} else {
							isHBTExists = false;
							break;
						}
					}
				}
				
			}
			
			//発信者番号通知オプションが解約済の場合
			if(isHBTExists)
			{
				//画面からは「有」で設定されているか？
				if(kKSV021109SCHash.get("hs_no_tchi").equals("1"))
				{
					//以降のオプションサービスの登録へと向かう
					return true;
				}
			}
			
		}catch (Exception e) {
			return false;
		}
		
		return false;
	}

}
