/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKCrecaPaySkaJdg
*	ソースファイル名：JKKCrecaPaySkaJdg.java
*	作成者			：GDC)M. Gungog
*	日付			：2021年08月10日
*＜機能概要＞
*	クレジットカードの支払審査結果を判定する。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v54.00.00	2021/08/10  GDC)M. Gungog		【ANK-3971-00-00】クレカ請求データの有効期限設定対応
*
**********************************************************************/
package eo.common.util;

import eo.common.constant.JKKStrConst;

/**
 * クレジットカードの支払審査結果を判定する。
 * @author GDC
 */

public class JKKCrecaPaySkaJdg 
{
	/**
	 * VISA(SMCC)
	 */
	private static final String VISA_SMCC = "99663";
	/**
	 * クレジットカード有効期限無効
	 */
	private static final String CRECARD_INVALID_EXPIRATION_DATE = "00092";
	/**
	 * 有効性ＯＫ
	 */
	private static final String YUU_KOU_SEI_OK = "1";
	/**
	 * 有効性ＮＧ
	 */
	private static final String YUU_KOU_SEI_NG = "2";
	/**
	 * 照合エラー
	 */
	private static final String SHOUGOU_ERROR = "3";
	/**
	 * 有効期限無効
	 */
	private static final String YUUKOU_KIGEN_MUKOU = "有効期限無効";
	/**
	 * "無効"文字列
	 */
	private static final String MUKOU = "無効";
	/**
	 * "有効"文字列
	 */
	private static final String YUUKOU = "有効";
	/**
	 * 空
	 */
	private static final String EMPTY = "";
	/**
	 * 含まない
	 */
	private static final String NOT_INCLUDED = "0";
	/**
	 * 含む
	 */
	private static final String INCLUDED = "1";
	
	/**
	 * クレジットカード支払審査結果判定処理
	 * <br>
	 * @param jdgstdDay 判定基準日
	 * @param ykCfmRsltDiv 有効性確認結果区分
	 * @param crecardStat クレジットカードステータス
	 * @param shikosakiCompCd 仕向先会社コード
	 * @param crecaMkYm クレジットカード無効年月
	 * @param crecardYkKigen クレジットカード有効期限
	 * @param idoDiv 異動区分
	 * @param opeDate オンライン運用日
	 * @return 支払審査結果
	 */
	public static String doCrecaPaySkaJdg(String jdgstdDay, String ykCfmRsltDiv, String crecardStat, 
			String shikosakiCompCd, String crecaMkYm, String crecardYkKigen, 
			String idoDiv, String opeDate)
	{
		String result = "";
		
		// 有効
		if(JKKStrConst.CRECARD_STAT_JDG_ZUMI.equals(crecardStat))
		{
			String jdgstdDayYearMonth = jdgstdDay.substring(0, 6) + "01";
			String opeDateYearMonth = opeDate.substring(0, 6) + "01";
			
			// VISA(SMCC)
			if(VISA_SMCC.equals(shikosakiCompCd))
			{
				// クレジットカード有効期限無効
				if(CRECARD_INVALID_EXPIRATION_DATE.equals(idoDiv))
				{
					String crecardYkKigenYearMonth = crecardYkKigen  + "01";
					// 有効期限 < 判定基準日
					if(JPCUtilCommon.isPastDate(crecardYkKigenYearMonth, opeDateYearMonth, NOT_INCLUDED))
					{
						return YUUKOU_KIGEN_MUKOU;
					}
				}
			}
			// ""(空) or "1"(有効性ＯＫ) or 2"(有効性ＮＧ) or "3"(照合エラー)
			if(isNullBlank(ykCfmRsltDiv) || YUU_KOU_SEI_OK.equals(ykCfmRsltDiv) 
					|| YUU_KOU_SEI_NG.equals(ykCfmRsltDiv) || SHOUGOU_ERROR.equals(ykCfmRsltDiv))
			{
				if(!isNullBlank(crecaMkYm))
				{
					String crecaMkYmYearMonth = crecaMkYm  + "01";
					
					// 無効期限 > 判定基準日
					if(JPCUtilCommon.isFutureDate(crecaMkYmYearMonth, jdgstdDayYearMonth, NOT_INCLUDED))
					{
						result = YUUKOU;
					}
					
					else if(JPCUtilCommon.isPastDate(crecaMkYmYearMonth, jdgstdDayYearMonth, INCLUDED))
					{
						result = MUKOU;
					}
				}
				
				else
				{
					result = YUUKOU;
				}
			}
			
			else
			{
				result = YUUKOU;
			}
		}
		
		// 無効
		else if(JKKStrConst.CRECARD_STAT_MK.equals(crecardStat))
		{
			result = MUKOU;
		}
		
		// 上記以外
		else
		{
			result = EMPTY;
		}
		
		return result;
	}
	
	/**
	 * 引数に値が設定されているか判定します。
	 * <br>
	 * @param arg0 判定する引数
	 * @return 引数に値が設定されていない場合はtrue
	 */
	private static boolean isNullBlank(String arg0) 
	{
		if(arg0 == null) 
		{
			return true;
		}
		
		return 0 == arg0.toString().length();
	}
}
