/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JFUGetMskmRoute
 *   ソースファイル名：JFUGetMskmRoute.java
 *   作成者          ：富士通
 *   日付            ：2024年01月24日
 *＜機能概要＞
 *   申込経路判定部品です（View）。
 *   量販店の場合、代理店を判別するため「データ抽出項目設定条件」の登録内容によって判別する。
 *   （FUSV0330_FUSV0330OPDBMapperで実行している
 *   JFUGetCampaignListCC.getSpCampaignListを参考に修正）
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v70.00      2024/02/05   FJ) 美濃原    【ANK-4551-00-00】202404CP対応
 **********************************************************************/
package eo.web.webview.common;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.HashMap;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
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 eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;

/**
 * 申込経路判定部品です。 <br>
 * 
 * @author 富士通
 */
public class JFUGetMskmRoute {
	/** 申込経路取得部品マップキー名 */
	private static final String FUSV037801CC = "FUSV037801CC";

	/** サービスID　FUSV0378 */
	private static final String USECASE_ID_FUSV0378 = "FUSV0378";

	// ■IN項目
	/** 取扱コード */
	private static final String IN_TRAT_CD = "trat_Cd";
	/** WEB割商品券（代理店） 例：DT4000006、DT4000008 */
	private static final String IN_TICKET_LIST = "ticket_List";
	/** WEB割商品券（GMS代理店） 例：DT4000008 **/
	private static final String IN_GMS_TICKET = "gms_ticket";

	// ■OUT項目
//	/** 商品券自動適用代理店   旧：autoCampaignAgnt */
//	private static final String AUTO_CAMPAIGN_AGNT = "auto_campaign_agnt";
	/** 量販店種別 */
	private static final String RYOHAN_KIND = "ryohan_kind";

	/**
	 * 申込経路取得。 (ANK-4551-00-00)<br>
	 *            ※呼出条件：販売タイプ、取扱店コード、取扱店用取扱コードが決定していること。
	 * @param bl
	 *            実行中のVIEWロジックインスタンス
	 * @return 申込経路
	 * @throws Exception
	 */
	public String getMskmRoute(X31BWebBusinessLogic bl) throws Exception {
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = bl.getCommonInfoBean();
		// "WEB新規"階層
		X31SDataBeanAccess web_new_infobean = (commoninfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO)).getDataBean(0);

		// 販売タイプ
		String hanbaiType = web_new_infobean.sendMessageString(CommonInfoCFConst.HANBAI_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE);
		DEBUG_LOG.debug("[JFUGetMskmRoute(getMskmRoot)] 販売タイプ(0：コンシューマ、1:量販、2：訪販)[" + hanbaiType + "] ");

		if (JFUStrConst.HNBAI_TYPE_RYOHAN.equals(hanbaiType))
		{
			// ■量販の場合
			// 商品券自動適用対象の代理店＝「量販WEB(代理店)、量販WEB(GMS代理店) 」
			// または「量販店」のどちらかとして判定する。
			String mskmRoot = getCampaignDchskm(bl, commoninfoBean);
			return mskmRoot;
			// TODO：auショップは訪販しかないはず→量販が設定されている場合は商品券の設定によって扱いが変わる
		}
		// ■その他（コンシューマ、提携住宅会社、訪販、訪販WEB(AUショップ)
		return JFUStrConst.EMPTY;
	}

	/**
	 * データ抽出項目設定条件(KK2391)に登録されている商品券情報を取得する。
	 * 
	 * @param bl
	 *            実行中のVIEWロジックインスタンス
	 * @param commoninfoBean
	 *            共有フォームBean
	 * @return 申込経路
	 * @throws Exception
	 */
	private String getCampaignDchskm(X31BWebBusinessLogic bl,
			X31SDataBeanAccess commoninfoBean) throws Exception {

		// =====================================================================
		// サービス呼出処理
		// =====================================================================
		HashMap<String, String> paramMap = new HashMap<String, String>(); // ユースケースIDマップ
		HashMap<String, Object> inputMap = new HashMap<String, Object>(); // 入力データマップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>(); // 結果データマップ

		// ユースケースIDをセット
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0378);

		// 上りマッピング
		setFUSV037801CC(commoninfoBean, inputMap, JPCModelConstant.FUNC_CD_1);

		// サービスをキック
		try
		{
			bl.invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 上記以外の場合システムエラーとし、業務共通例外クラス（JCCBusinessException）をスローする。
			DEBUG_LOG.info("■■■[JFUGetMskmRoute(getCampaignDchskm)] サービス呼び出しエラー■■■");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
		// 下りマッピング
		String resultFlg = getFUSV037801CC(commoninfoBean, outputMap);

		return resultFlg;
	}

	/**
	 * 選択可能キャンペーン取得CC（キャンペーン取得処理）上りマッピングをする
	 * 
	 * @param bean
	 *            　共有フォームBean
	 * @param outputMap
	 * @param func_code
	 *            　機能コード
	 * @return outputMap
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private HashMap setFUSV037801CC(X31SDataBeanAccess bean, HashMap outputMap, String func_code) throws Exception
	{

		// ■量販WEB(代理店)の判定用（「JFUGetCampaignListCC_キャンペーン一覧取得」でも利用）
		// DT4000006:"170016ZZ" 商品券プレゼントキャンペーン（商品券１０，０００円）＿ＨＴＭＺ
		// DT4000059:"190008ZZ" 商品券プレゼントキャンペーン（商品券３，０００円）＿MT
		// DT4000008:"170018ZZ" ｅｏ光イベントキャンペーン（商品券１０，０００円）
		// List<String> webwariAGNTList = Arrays.asList(JFUWebCommon.getDispText("COMMONSETTING", "WEB_WARI_CAMP_LIST").split(","));

		// ■量販WEB(GMS代理店)の判定用（「JFUGetCampaignListCC_キャンペーン一覧取得」でも利用）
		// DT4000008:"170018ZZ" ｅｏ光イベントキャンペーン（商品券１０，０００円）
		// List<String> webwariGMSList = Arrays.asList(JFUWebCommon.getDispText("COMMONSETTING", "WEB_WARI_CAMP_GMS").split(","));

		// キャンペーン取得処理
		if (bean == null)
		{
			return null;
		}

		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		// WEB新規情報
		X31SDataBeanAccess bnWebinfo = getWebInfo(bean);
		// その他情報
		X31SDataBeanAccess bnElseinfo = getElseInfo(bnWebinfo);
		// 取扱店用取扱コード
		String toriten_toriatsukai_cd = bnElseinfo.sendMessageString(CommonInfoCFConst.TORITEN_TORIATSUKAI_CD_18, X31CWebConst.DATABEAN_GET_VALUE);
		// 取扱コードをparentMapに直接設定
		parentMap.put(IN_TRAT_CD, toriten_toriatsukai_cd);
		// WEB割商品券（代理店）（カンマ区切り）※代理店判定に使用
		String ticketList = JFUWebCommon.getDispText("COMMONSETTING", "WEB_WARI_CAMP_LIST");
		parentMap.put(IN_TICKET_LIST, ticketList);

		if (JFUStrConst.HNBAI_TYPE_RYOHAN.equals(bnWebinfo.sendMessageString(CommonInfoCFConst.HANBAI_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			// 量販WEB(GMS代理店)の判定用（「JFUGetCampaignListCC_キャンペーン一覧取得」で利用）
			// WEB割商品券（GMS代理店）（カンマ区切り）
			String gmsList = JFUWebCommon.getDispText("COMMONSETTING", "WEB_WARI_CAMP_GMS");
			parentMap.put(IN_GMS_TICKET, gmsList);
		}

		outputMap.put(FUSV037801CC, parentMap);
		return outputMap;
	}

	/**
	 * 下りマッピングをする
	 * 
	 * @param commoninfoBean
	 *            共有フォームBean
	 * @param outputMap
	 *            設定値格納マップ
	 * @return 代理店種別
	 * @throws Exception
	 */
	private String getFUSV037801CC(X31SDataBeanAccess commoninfoBean, HashMap<String, Object> outputMap) throws Exception
	{
		// WEB新規情報
		X31SDataBeanAccess bnWebNewinfo = getWebInfo(commoninfoBean);

		// 量販店種別の取得
		if (JFUStrConst.HNBAI_TYPE_RYOHAN.equals(bnWebNewinfo.sendMessageString(CommonInfoCFConst.HANBAI_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			if (outputMap.containsKey(RYOHAN_KIND))
			{
				String agentKind = (String)outputMap.get(RYOHAN_KIND);
				return agentKind;
			}
		}
		return JFUStrConst.EMPTY;
	}

	/**
	 * WEB新規情報
	 * 
	 * @param bean
	 * @return bn
	 */
	private X31SDataBeanAccess getWebInfo(X31SDataBeanAccess bean)
	{
		X31SDataBeanAccessArray arr = bean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		if (arr.getCount() == 0)
		{
			arr.addDataBean();
		}
		X31SDataBeanAccess bn = arr.getDataBean(0);

		return bn;
	}

	/**
	 * その他情報
	 * 
	 * @param bn
	 * @return その他情報
	 */
	private X31SDataBeanAccess getElseInfo(X31SDataBeanAccess bn)
	{
		X31SDataBeanAccessArray arr = bn.getDataBeanArray(CommonInfoCFConst.ELSE_INFO);
		if (arr.getCount() == 0)
		{
			arr.addDataBean();
		}
		X31SDataBeanAccess bn1 = arr.getDataBean(0);

		return bn1;
	}
}
