/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JCNWebCommon
*	ソースファイル名：JCNWebCommon.java
*	作成者			：EK908988
*	日付			：2011年08月03日
*＜機能概要＞
*	コンテンツ決済オンライン共通
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*	ｖ20.00.00	2015/11/13	FJ)清原		ANK-2565-00-00 クレジットカード番号預かりサービス導入（Step3：預かり番号化）
*	ｖ20.00.01	2016/01/05	FJ)清原		ANK-2565-05-00 【案件内仕変】コンテンツ支払方法変更画面の表示文言変更
*	ｖ58.00.00	2022/04/12	FJ)北村		ANK-3846-00-00 【クレカ】クリアパス→ペイジェント移行
*
********************************************************************************/

package eo.web.webview.common;

import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import java.text.DecimalFormat;
import java.util.HashMap;

import eo.common.util.JCCFrameworkException;
import eo.common.util.JCCToolTextDateFormat;
import eo.web.webview.JCCWebBusinessLogic;

/**
 * コンテンツ決済WEB共通
 *
 */
public class JCNWebCommon extends JCCWebCommon {

	/**
	 * ページング設定
	 * 
	 * @param arg0 実行中のVIEWロジックインスタンス
	 * @param parentMap 親マップ
	 * @param scId サービスコンポーネントID
	 * @param pattern 検索処理パターン
	 * @param maxCnt 最大検索件数（プロパティのラベル）
	 * @param dispNum 表示件数（プロパティのラベル）
	 */
	public static void setPagingInfo(JCCWebBusinessLogic arg0, HashMap parentMap, String scId, String pattern, String maxCnt, String dispNum) {
		// ページング用マップ取得
		HashMap<String, Object> pagingMap = (HashMap)parentMap.get(scId);
		// 検索処理パターン設定
		pagingMap.put(JCNWebConst.PAGING_INFO_SEARCH_TYPE, pattern);
		// 最大検索件数設定
		pagingMap.put(JCNWebConst.PAGING_INFO_MAX_SEARCH_NUM, JCCWebCommon.getSearchConst(maxCnt));
		// 表示件数設定
		pagingMap.put(JCNWebConst.PAGING_INFO_DISPLAY_NUM, JCCWebCommon.getSearchConst(dispNum));
		// ページング初期設定
		JCCWebCommon.upmapperPageLinkInfo(arg0, scId, parentMap);
	}
	
	/**
	 * Pull Downの年月リストをBeanに設定する
	 * 
	 * @param bean
	 * @param listNm
	 * @param beanItemNm
	 * @param beanItemValueNm
	 * @param monthNm
	 */
	public static void setPullDownYm(X31SDataBeanAccess[] bean, String listNm, String beanItemNm, String beanItemValueNm, int monthNm, String OpeDate )
	{
		// 現在の日付を取得
		String targetYm = OpeDate;
		if(targetYm == null)
		{
			// 引き継いだ年月がnullの場合はシステム日付を設定
			targetYm = JCCWebCommon.getSysDate();
		}
		String listYm = "";
		X31SDataBeanAccessArray targetList = bean[0].getDataBeanArray(listNm);
		targetList.clearArray();
		X31SDataBeanAccess subbean = null;
		subbean = targetList.addDataBean();

		JCCToolTextDateFormat textFormat = new JCCToolTextDateFormat("yyyy年mm月", "yyyymm");
		// 現在を含めて過去ｎヶ月のリストを作る
		for(int i = 0; i < monthNm; i++){
			try
			{
				listYm = JCCWebCommon.addMonth(targetYm, -i);
				// 対象月リスト.利用月 ← チョイスチケット利用対象月取得マップ.対象月リスト.利用月リスト（値）
				subbean.sendMessageString(beanItemNm, X31CWebConst.DATABEAN_ADD_VALUE, textFormat.formattedPrint(listYm.substring(0, 6)));
				// 対象月リスト.対象年月 ← チョイスチケット利用対象月取得マップ.対象月リスト.利用月リスト
				subbean.sendMessageString(beanItemValueNm, X31CWebConst.DATABEAN_ADD_VALUE, listYm.substring(0, 6));
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * Pull Downの年月リストをBeanに設定する(運用年月の前月から)
	 * 
	 * @param bean
	 * @param listNm
	 * @param beanItemNm
	 * @param beanItemValueNm
	 * @param monthNm
	 */
	public static void setPullDownBeforYm(X31SDataBeanAccess[] bean, String listNm, String beanItemNm, String beanItemValueNm, int monthNm, String OpeDate )
	{
		// 現在の日付を取得
		String targetYm = OpeDate;
		if(targetYm == null)
		{
			// 引き継いだ年月がnullの場合はシステム日付を設定
			targetYm = JCCWebCommon.getSysDate();
		}
		String listYm = "";
		X31SDataBeanAccessArray targetList = bean[0].getDataBeanArray(listNm);
		targetList.clearArray();
		X31SDataBeanAccess subbean = null;
		subbean = targetList.addDataBean();

		JCCToolTextDateFormat textFormat = new JCCToolTextDateFormat("yyyy年mm月", "yyyymm");
		// 現在を含めて過去ｎヶ月のリストを作る
		for(int i = 0; i < monthNm; i++){
			try
			{
				// 運用年月の前月から設定する
				listYm = JCCWebCommon.addMonth(targetYm, -i -1);
				// 対象月リスト.利用月 ← チョイスチケット利用対象月取得マップ.対象月リスト.利用月リスト（値）
				subbean.sendMessageString(beanItemNm, X31CWebConst.DATABEAN_ADD_VALUE, textFormat.formattedPrint(listYm.substring(0, 6)));
				// 対象月リスト.対象年月 ← チョイスチケット利用対象月取得マップ.対象月リスト.利用月リスト
				subbean.sendMessageString(beanItemValueNm, X31CWebConst.DATABEAN_ADD_VALUE, listYm.substring(0, 6));
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * クレジットカード番号編集
	 * 16桁のクレジットカード番号をxxxx-xxxx-xxxx-xxxx形式へ変更する
	 * 
	 * @param crecardNo
	 * @return
	 */
	public static String crecardNoEdit(String crecardNo)
	{
		crecardNo = crecardNo.trim();
		int len = crecardNo.length();
		if (len < 8)
		{
			return "";
		}
		String no1 = crecardNo.substring(0, 4);
		String no2 = crecardNo.substring(4, 8);
		String no3 = "";
		String no4 = "";
		StringBuffer str = new StringBuffer();
		if (len > 12)
		{
			no3 = crecardNo.substring(8, 12);
			no4 = crecardNo.substring(12, len);
			str.append(no1).append("-").append(no2).append("-").append(no3).append("-").append(no4);
		}
		else
		{
			no3 = crecardNo.substring(8, len);
			str.append(no1).append("-").append(no2).append("-").append(no3);
		}
		
		return str.toString();
	}
	
	/**
	 * 権限有無判定処理。 <br>
	 * 共有フォームBeanに登録された権限リストと権限制御定義ファイルを突き合わせ、 <br>
	 * 権限の有無を判定して結果を返します。
	 * <br>
	 * @param vl VIEWロジックインスタンス
	 * @param eventKey 権限制御定義ファイルに設定する画面ID、イベントID、イベント番号の設定値（例：CRW034010PJP;B_OPEN_CRW00101_INS;0）
	 * @return 権限有無
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	public static boolean checkAuthority(X31BWebBusinessLogic vl, String eventKey) throws JCCFrameworkException
	{
		return JCNEditPrc.checkAuthority(vl, eventKey);
	}

	/**
	 * 電話番号にハイフンを設定する。<br>
	 * 
	 * @param telNo 電話番号
	 * @return ハイフンが設定された電話番号
	 */
	public static String formatTelNo(String telNo)
	{
		if (telNo == null)
		{
			return null;
		}

		if (telNo.length() == 10)
		{
			// 10桁の電話番号の場合（xx-xxxx-xxxx）
			return formatTelNoAdd1(telNo);
		}
		else if (telNo.length() == 11)
		{
			// 11桁の電話番号の場合（xxx-xxxx-xxxx）
			return formatTelNoAdd2(telNo);
		}
		else if (telNo.length() == 12)
		{
			// 12桁の電話番号の場合（xxxx-xxxx-xxxx）
			return formatTelNoAdd3(telNo);
		}

		return telNo;
	}
//	ｖ20.00.00 Add Start

	/**
	 * クレジットカード画面表示編集
	 * コンテンツ事業業務における、クレジットカードの画面表示内容を編集する
	 * 
	 * @param crecard_comp_nm 		クレジットカード会社名
	 * @param crecard_no			クレジットカード番号
	 * @param crecard_yk_kigen				クレジットカード有効期限
	 * @param crecard_no_azkri_id	クレジットカード預りID
	 * @return str					編集後の値
	 *         [(例）クレジットカード　ＪＣＢ　下4桁：0000　有効期限：2020/12　【カード預りID：C55E646347F6B003】]
	 * 
	 */
	public static String editCreditCard(String crecard_comp_nm,
										String crecard_no, 
										String crecard_yk_kigen, 
										String crecard_no_azkri_id) 
	{
		
		final String SPACE = "　";
		StringBuilder str = new StringBuilder();
		
		str.append("クレジットカード");
		str.append(SPACE);
		
		str.append(crecard_comp_nm);  				// クレジットカード会社名
		str.append(SPACE);
		
		str.append("下4桁：");
		str.append(edit4ketaCreCardNo(crecard_no));  // クレジットカード番号
		str.append(SPACE);
		
		str.append("有効期限：");
		str.append(formatYyyyMm(crecard_yk_kigen));			// クレジットカード有効期限
		str.append(SPACE);
		
		str.append("【カード預りID：");
		str.append(crecard_no_azkri_id);			// クレジットカード番号預りID
		str.append("】");

		return new String(str);

	}
	
//	ｖ20.00.01 Add Start
	/**
	 * クレジットカード画面表示編集（次月支払方法）
	 * コンテンツ事業業務における、クレジットカードの画面表示内容を編集する
	 * 
	 * @param crecard_comp_nm 		クレジットカード会社名
	 * @param crecard_no			クレジットカード番号
	 * @param crecard_yk_kigen				クレジットカード有効期限
	 * @param crecard_no_azkri_id	クレジットカード預りID
	 * @return str					編集後の値
	 *         [(例）クレ　ＪＣＢ　下4桁：0000　有効期限：2020/12　カード預りID：C55E646347F6B003]
	 * 
	 */
	public static String editNextMonthCreditCard(String crecard_comp_nm,
										String crecard_no, 
										String crecard_yk_kigen, 
										String crecard_no_azkri_id) 
	{
		
		final String SPACE = "　";
		StringBuilder str = new StringBuilder();
		
		str.append("クレ");
		str.append(SPACE);
		
		str.append(crecard_comp_nm);  				// クレジットカード会社名
		str.append(SPACE);
		
		str.append("下4桁：");
		str.append(edit4ketaCreCardNo(crecard_no));  // クレジットカード番号
		str.append(SPACE);
		
		str.append("有効期限：");
		str.append(formatYyyyMm(crecard_yk_kigen));			// クレジットカード有効期限
		str.append(SPACE);
		
		str.append("カード預りID：");
		str.append(crecard_no_azkri_id);			// クレジットカード番号預りID

		return new String(str);

	}
//	ｖ20.00.01 Add End
	/**
	 * クレジットカード番号下4桁編集
	 * クレジットカード番号の下4桁を編集する
	 * 
	 * @param creCardNo クレジットカード番号
	 * @return editcrecardNo クレジットカード番号の下4桁
	 */
	private static String edit4ketaCreCardNo(String creCardNo)
	{

		// カード番号がnull又は4桁未満の場合はそのまま返す
		if (isNullBlank(creCardNo) || creCardNo.trim().length() < 4) {
			return creCardNo;
		} else {
			return creCardNo.substring(creCardNo.trim().length() - 4, creCardNo.trim().length());
		}
	}
	
	/**
	 * yyyymmからyyyy/mmに編集
	 * 「yyyymm」形式の年月を「yyyy/mm」形式に編集する
	 * 
	 * @param yyyymm
	 * @return str	「yyyy/mm」に編集された年月
	 */
	private static String formatYyyyMm(String yyyymm)
	{
		
		if (isNullBlank(yyyymm) || yyyymm.length() < 6) {
			return yyyymm;
		} else {
			StringBuilder str = new StringBuilder();
			str.append(yyyymm.substring(0, 4));
			str.append("/");
			str.append(yyyymm.substring(4, 6));

			return new String(str);
		}
	}

	/**
	 * null、空白チェック
	 * null又は空文字の場合、trueを返却する
	 * 
	 * @param str 検査対象文字列
	 * @return true:null、又は空文字／false:左記以外
	 */
	public static boolean isNullBlank(String str)
	{
		if (str == null || "".equals(str))
		{
			return true;
		}
		return false;
	}
//	ｖ20.00.00 Add End
//	ｖ58.00.00 Add Start

	/**
	 * クレジットカード画面表示編集
	 * コンテンツ事業業務における、クレジットカードの画面表示内容を編集する
	 * 
	 * @param crecard_comp_nm 		クレジットカード会社名
	 * @param crecard_no			クレジットカード番号
	 * @param crecard_yk_kigen				クレジットカード有効期限
	 * @param crecard_no_azkri_id	クレジットカード預りID
	 * @param kssai_id				決済ID
	 * @return str					編集後の値
	 *         [(例）クレジットカード　ＪＣＢ　下4桁：0000　有効期限：2020/12　【カード預りID：C55E646347F6B003】　【決済ID：123459876597865123】]
	 * 
	 */
	public static String editCreditCard(String crecard_comp_nm,
										String crecard_no, 
										String crecard_yk_kigen, 
										String crecard_no_azkri_id,
										String kssai_id) 
	{
		
		final String SPACE = "　";
		StringBuilder str = new StringBuilder();
		
		str.append("クレジットカード");
		str.append(SPACE);
		
		str.append(crecard_comp_nm);  				// クレジットカード会社名
		str.append(SPACE);
		
		str.append("下4桁：");
		str.append(edit4ketaCreCardNo(crecard_no));  // クレジットカード番号
		str.append(SPACE);
		
		str.append("有効期限：");
		str.append(formatYyyyMm(crecard_yk_kigen));			// クレジットカード有効期限
		str.append(SPACE);
		
		str.append("【カード預りID：");
		str.append(crecard_no_azkri_id);			// クレジットカード番号預りID
		str.append("】");
		str.append(SPACE);

		str.append("【決済ID：");
		str.append(kssai_id);			// 決済ID
		str.append("】");

		return new String(str);

	}
//	ｖ58.00.00 Add End
}