/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKCtrlTobilaInfoStubImpl
*	ソースファイル名：JKKCtrlTobilaInfoStubImpl.java
*	作成者			：FJ）
*	日付			：2020年06月15日
*＜機能概要＞
*	トビラシステムズ社 JSON連携（検証環境用）コマンド発行部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v50.00.00	2020/06/15  FJ)中原		【ANK-3754-00-00】トビラフォン対応
*
**********************************************************************/
package eo.common.util;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;


/**
 * トビラシステムズ連携独自処理部品（検証環境用）クラスです。
 * @author FJ
 */
public class JKKCtrlTobilaInfoStubImpl extends JKKCtrlTobilaInfo
{
	
	// レスポンスパラメータ定数定義
	/** エラーコード */
	private static final String ERROR_CODE = "error_code";
	
	/**
	 * トビラシステムズスタブステータス
	 */
	protected static final String KK_TOBILA_STUB_HTTP_STATUS = "KK_TOBILA_STUB_HTTP_STATUS";
	
	/**
	 * トビラシステムズスタブエラーコード
	 */
	protected static final String KK_TOBILA_STUB_ERR_CODE = "KK_TOBILA_STUB_ERR_CODE";

	/** HTTPSTATUSCD（業務エラー） */
	private String HTTP_STATUS_CD_400 = "400";
	
	// リクエストパラメータ定数定義
	/** HGW連携パラメータ */
	private static final String HGW_KEY = "hgw_key";

	/** 電話番号 */
	private static final String TEL_NUM = "tel_num";

	/** サービス開始日 */
	private static final String START_DATE = "start_date";

	/** 解約日 */
	private static final String CANCEL_DATE = "cancel_date";

	/** 機能初期利用フラグ */
	private static final String DEFAULT_ENABLED = "default_enabled";

//	 * KKIFE355_トビラシステムズ申込依頼の返却値を擬似的に返却します
	
	/**
	 * serviceMapの情報からテスト用に返却する値を作成し、返却する
	 * @param serviceMap 引継情報
	 * @return テスト用の返却値
	 * @throws Exception Exception
	 */
	public HashMap<String, Object> call_tobila(Map<String, Object> serviceMap) throws Exception
	{
		HashMap<String, Object> result = new HashMap<String, Object>();
		String resJson = "";
		String reqLog = "";
		String resLog = "";
		
		int stbHttpStatus = Integer.parseInt(JCMAPLConstMgr.getString(KK_TOBILA_STUB_HTTP_STATUS));
		String stbErrCd = JCMAPLConstMgr.getString(KK_TOBILA_STUB_ERR_CODE);
		
		try
		{
			// JSON形式の文字列を作成する。
			String reqjson = requestParamMake(serviceMap);
			reqLog = reqjson.replaceAll("\\s+", " ");
			
			if (HTTP_STATUS_CD_400.equals(stbHttpStatus))
			{
				resJson = responseParamMake(stbErrCd);
				resLog = resJson.replaceAll("\\s+", " ");
			}
		}
		catch (IOException e)
		{
			e.printStackTrace();
			throw e;
		}

		result.put("httpStatusCd", stbHttpStatus);
		result.put("errCode", stbErrCd);
		result.put("request", reqLog);
		result.put("response", resLog);

		return result;
	}
	

	/**
	 * TOBILA APIに対して送信するリクエストパラメータを作成する。
	 * @param Map<String, Object> 入力パラメータ
	 * @return TOBILA JSON形式のリクエストパラメータを返却する。
	 * @throws IOException JOSN形式へ変換する際のI/O例外
	 */
	private static String requestParamMake(Map<String, Object> serviceMap) throws IOException
	{

		// JOSN形式へ変換するためのMAP
		Map<String, Object> requestMap = new HashMap<String, Object>();
		// 変換後文字列
		String json = "";

		// リクエストパラメータ
		// HGW連携パラメータ
		requestMap.put(HGW_KEY, (String)serviceMap.get("tobilaphId"));

		// 電話番号
		requestMap.put(TEL_NUM, (String)serviceMap.get("telNo"));

		// 以下API毎の固有設定 START
		// サービス開始日
		if ( serviceMap.containsKey("startDate") )
		{
			requestMap.put(START_DATE, (String)serviceMap.get("startDate"));
		}

		// 解約日
		if ( serviceMap.containsKey("cancelDate") )
		{
			requestMap.put(CANCEL_DATE, (String)serviceMap.get("cancelDate"));
		}

		// 機能初期利用フラグ
		if ( serviceMap.containsKey("defaultEnabled") )
		{
			requestMap.put(DEFAULT_ENABLED, (String)serviceMap.get("defaultEnabled"));
		}
		// 以下API毎の固有設定 END

		ObjectMapper mapper = new ObjectMapper();
		mapper.enable(SerializationFeature.INDENT_OUTPUT);
		try
		{
			// JOSN形式へ変換
			json = mapper.writeValueAsString(requestMap);

		} catch (IOException e)
		{
			e.printStackTrace();
			throw e;
		}
		
		return json;
	}

	/**
	 * TOBILA APIに対して送信するレスポンスパラメータを作成する。
	 * @param String エラーコード
	 * @return TOBILA JSON形式のレスポンスパラメータを返却する。
	 * @throws IOException JOSN形式へ変換する際のI/O例外
	 */
	private static String responseParamMake( String errCode ) throws IOException
	{

		// JOSN形式へ変換するためのMAP
		Map<String, Object> responseMap = new HashMap<String, Object>();
		// 変換後文字列
		String json = "";

		// レスポンスパラメータ
		// エラーコード
		responseMap.put(ERROR_CODE, errCode);

		ObjectMapper mapper = new ObjectMapper();
		mapper.enable(SerializationFeature.INDENT_OUTPUT);
		try
		{
			// JOSN形式へ変換
			json = mapper.writeValueAsString(responseMap);

		} catch (IOException e)
		{
			e.printStackTrace();
			throw e;
		}
		
		return json;
	}

}
