package com.fujitsu.futurity.bp.custom.reqchk;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.KKSV0211_KKSV0211OP;
import com.fujitsu.futurity.bp.custom.constant.KKSV0211_KKSV0211OP_KKSV021103SC;
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.common.constant.JKKStrConst;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191B001CBSMsg1List;

public class JKKSV021126ReqChk  extends JKKSV021106ReqChk {
	
	/**
	 * 電話番号情報登録・光電話・電話番号情報変更の実行判定クラス
	 */
	@SuppressWarnings("unchecked")
	public boolean checkExecution(IRequestParameterReadOnly irp,
			IConditionValue conditionvalue) throws ReqChkException {

		try
		{
			// 異動対象のサービス契約内訳＜eo光電話＞情報変更を取得
			HashMap<String, Object> kksv021107sc = (HashMap<String, Object>)irp.getData("KKSV021107SC");
			String svcKeiUcwkNo = (String)kksv021107sc.get("svc_kei_ucwk_no");
			String vaKikiChgNo = (String)kksv021107sc.get("va_kiki_chg_no");

			// OM-2014-0001297 番号追加した電話番号に1ポートVAが紐付けられる 2014/04/07 START
			// ANK-1855-00-00対応により、番号変更中でも電話番号情報変更の異動が可能となったため、
			// 同一の電話番号順番の内訳に対してポート番号更新（相対する番号に更新）が行われてしまう（潜在障害）
			// サービス契約内訳＜eo光電話＞一意照会を取得
			HashMap<String, Object> kksv021102sc = (HashMap<String, Object>)irp.getData("KKSV021102SC");
			ArrayList<HashMap<String, Object>> eKK0191A010CBSMSG1LIST = (ArrayList<HashMap<String, Object>>)kksv021102sc.get(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);
			String telnoJun = (String)eKK0191A010CBSMSG1LIST.get(0).get(EKK0191A010CBSMsg1List.TELNO_JUN);
			// OM-2014-0001297 番号追加した電話番号に1ポートVAが紐付けられる 2014/04/07 END

			// サービス契約に紐付く内訳を取得
			Map<String, Object> kksv021103sc = (Map<String, Object>)irp.getData(KKSV0211_KKSV0211OP.KKSV021103SC);
			List<Map<String, Object>> ekk0191b001CbsMsgList
				= (List<Map<String, Object>>)kksv021103sc.get(KKSV0211_KKSV0211OP_KKSV021103SC.EKK0191B001CBSMSG1LIST);

			for (Map<String, Object> ekk0191b001CbsMsg : ekk0191b001CbsMsgList)
			{
				String svcKeiUcwkNo2 = (String)ekk0191b001CbsMsg.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_NO);
				String svcKeiUcwkStat2 = (String)ekk0191b001CbsMsg.get(EKK0191B001CBSMsg1List.SVC_KEI_UCWK_STAT);
				String vaKikiChgNo2 = (String)ekk0191b001CbsMsg.get(EKK0191B001CBSMsg1List.VA_KIKI_CHG_NO);
				// OM-2014-0001297 番号追加した電話番号に1ポートVAが紐付けられる 2014/04/07 START
				String telnoJun2 = (String)ekk0191b001CbsMsg.get(EKK0191B001CBSMsg1List.TELNO_JUN);
				// OM-2014-0001297 番号追加した電話番号に1ポートVAが紐付けられる 2014/04/07 END
				// 異動対象と別内訳が存在し、解約済・キャンセル済でない場合
				if (!svcKeiUcwkNo.equals(svcKeiUcwkNo2)
					&& !JKKStrConst.CD00037_DSL_ZM.equals(svcKeiUcwkStat2)
					&& !JKKStrConst.CD00037_CANCEL_ZM.equals(svcKeiUcwkStat2)
					// OM-2014-0001297 番号追加した電話番号に1ポートVAが紐付けられる 2014/04/07 START
					&& !telnoJun.equals(telnoJun2)
					// OM-2014-0001297 番号追加した電話番号に1ポートVAが紐付けられる 2014/04/07 END
					)
				{
					// VA機器変更番号が一致する場合
					if (null != vaKikiChgNo && !vaKikiChgNo.isEmpty() && vaKikiChgNo.equals(vaKikiChgNo2))
					{
						return true;
					}
				}
			}
		}
		catch (Exception e)
		{
			return false;
		}

		return false;

	}
	
}
