/**
 * 
 */
package com.fujitsu.futurity.bp.custom.reqchk;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.reqchk.exception.ReqChkException;


/**
 * KKSV0170 トーキ登録初期表示<br>
 * KKSV017003SC サービス契約内訳＜ｅｏ光電話＞一意照会SC 以降のSC呼びだしの実施可否<br>
 *<br>
 * サービス契約内訳一意照会S-IFのサービス契約内訳ステータスが“サービス提供中”“解約済””休止中”の場合に実行する。
 * “休止中”の判断は休止中断コードも参照して判定する。
 * 
 * @author 富士通
 * @since 2012-11-05
 */
public class JKKSV017004ReqChk extends AbstractCustomReqChk {

// 2012.12.05 ANK-1293-00-00 suzuki del start
//	/** サービス契約内訳ステータス（キャンセル済） */
//	private static final String SVC_KEI_UCWK_STAT_CANCEL = "920";
// 2012.12.05 ANK-1293-00-00 suzuki del end
	
// 2012.12.05 ANK-1293-00-00 suzuki add start
	/** サービス契約内訳ステータス（サービス提供中） */
	private static final String SVC_KEI_UCWK_STAT_OFFERED = "100";
	/** サービス契約内訳ステータス（解約済） */
	private static final String SVC_KEI_UCWK_STAT_KAIYAKU = "910";
	/** サービス契約内訳ステータス（休止・中断中） */
	private static final String SVC_KEI_UCWK_STAT_KYUSHI_CHUDAN = "210";
	/** 休止中断コード（休止中(SOD未発行)） */
	private static final String PAUSE_STP_CD_KYUSHI_NOSOD = "00";
	/** 休止中断コード（休止中(SOD発行済)） */
	private static final String PAUSE_STP_CD_KYUSHI_SOD = "01";
// 2012.12.05 ANK-1293-00-00 suzuki add end
	
	/** 異動区分コード（住所変更・登録） */
	private static final String IDO_DIV_JUSHO_HENKO = "00019";
	
	/**
	 * サービス契約一意照会ＳＣ　実行判定メソッド
	 */
	@SuppressWarnings("unchecked")
	@Override
	public boolean checkExecution(IRequestParameterReadOnly arg0, IConditionValue arg1) throws ReqChkException
	{
		//SCマップから必要な情報を取り出す
		HashMap<String, Object> parentMap;
		try 
		{
// 2012.12.05 ANK-1293-00-00 suzuki del start
// 住所変更だからやらない、というのはやめる。
//			//異動区分の取得
//			parentMap = (HashMap<String, Object>)arg0.getData("WORK");
//			String ido_div = (String)parentMap.get("ido_div");
//
//			// 異動区分が住所変更の場合はfalse
//			if (null == ido_div || IDO_DIV_JUSHO_HENKO.equals(ido_div))
//			{
//				return false;
//			}
// 2012.12.05 ANK-1293-00-00 suzuki del end
			

			//サービス契約内訳ステータスの取得
//			String svc_kei_ucwk_stat = (String)parentMap.get("svc_kei_ucwk_stat");
			parentMap = (HashMap<String, Object>)arg0.getData("KKSV017003SC");
			List list = ((List)parentMap.get("EKK0161A010CBSMsg1List"));
			String svc_kei_ucwk_stat = (String) ((Map)list.get(0)).get("svc_kei_ucwk_stat");
			
			//休止中断コードの取得
			String pause_stp_cd = (String) ((Map)list.get(0)).get("pause_stp_cd");
			
// 2012.12.05 ANK-1293-00-00 suzuki mod start
//			//サービス契約内訳ステータスが“キャンセル済”でないなら実行ＯＫ
//			if (svc_kei_ucwk_stat != null && ! SVC_KEI_UCWK_STAT_CANCEL.equals(svc_kei_ucwk_stat))
			//・サービス契約内訳ステータスが“サービス提供中”or“解約済”
			//・サービス契約内訳ステータスが“休止中断中”かつ （休止中断コードが“休止中(SOD未発行)　または　休止中(SOD発行済)）”
			//上記のいずれかなら実行ＯＫ
			if (svc_kei_ucwk_stat != null && 
					(  isSvcKeiUcwkStatOferrdOrKaiyaku(svc_kei_ucwk_stat) 
					|| isKyusi(svc_kei_ucwk_stat, pause_stp_cd) ) )
// 2012.12.05 ANK-1293-00-00 suzuki mod end
			{
				return true;
			}
		}
		catch (RequestParameterException e) 
		{
			return false;
		}

		return false;
	}

// 2012.12.05 ANK-1293-00-00 suzuki add start
	private boolean isSvcKeiUcwkStatOferrdOrKaiyaku(String svc_kei_ucwk_stat) {
		return SVC_KEI_UCWK_STAT_OFFERED.equals(svc_kei_ucwk_stat) || SVC_KEI_UCWK_STAT_KAIYAKU.equals(svc_kei_ucwk_stat);
	}
	
	private boolean isKyusi(String svc_kei_ucwk_stat, String pause_stp_cd) {
		return SVC_KEI_UCWK_STAT_KYUSHI_CHUDAN.equals(svc_kei_ucwk_stat) && 
			( PAUSE_STP_CD_KYUSHI_NOSOD.equals(pause_stp_cd) || PAUSE_STP_CD_KYUSHI_SOD.equals(pause_stp_cd) );
	}
// 2012.12.05 ANK-1293-00-00 suzuki add end

}
