/*********************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JECNA0020001TPMA
*   ソースファイル名：JECNA0020001TPMA.java
*   作成者          ：富士通
*   日付            ：2011年07月02日
*＜機能概要＞
*   主処理(共通)<BR>
*   CCMG決済方法変更API呼出独自処理部品クラス.
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2011/07/02  富士通      新規作成
*   v3.00		2012/09/03  FJ)小林		【ST1-2012-0000480】パラメータ設定水平展開対応
*
**********************************************************************/

package eo.ejb.cbs.mainproc;

import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;

import eo.ejb.cbs.cbsmsg.ECNA0020001CBSMsg;
import eo.ejb.common.JCCModelCommon;

import eo.ejb.common.JCKLcsRenkeiUtil;

/**
 * <p>
 * CCMG決済方法変更API呼出独自処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JECNA0020001TPMA implements TemplateMainHandler
{
	public static String PGID = "JECNA0020001TPMA";

	/**
	 * コンストラクタ.
	 */
	public JECNA0020001TPMA()
	{
		super();
	}

	/**
	 * CCMG決済方法変更API呼出独自処理部品です。
	 * @param inCBSMsg CAANメッセージ
	 * @param inContext コンテキスト
	 */
	public void invoke(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "JECNA0020001TPMA#invoke start");

		// 処理結果の初期化
		String result = "00000";

		// パラメータをString配列に変換
		String[] params = makeParamCcmgApi(inCBSMsg);

		result = requestPaywayApi(inCBSMsg, params);

		// エラーフラグのセット
		inCBSMsg.set(ECNA0020001CBSMsg.ERROR_CD, result);

		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "JECNA0020001TPMA#invoke end");
	}

	/**
	 * CCMG決済方法変更API呼出に対してリクエストを送信する。
	 * @param param メッセージキャリア
	 * @return AxMから返された結果コード
	 */
	private String requestPaywayApi(CAANMsg inCBSMsg, String[] params)
	{
		int result = 0;
		
		// パラメータ作成
		Map<String, Object> paramPayway = new HashMap<String, Object>();

		String sysid = params[0];
		String contKeiNo = params[1];
		String paywayCd = params[2];
		String paywayId = "";
		if ("1".equals(paywayCd))
		{
			// クレジットカード
			paywayId = params[3];
		}
		else
		{
			// ISP決済
			paywayId = params[4];
		}
		String updId = params[5];
		String updNm = params[6];
		String updDtm = params[7];
		
		paramPayway.put("SYS_ID", sysid);
		paramPayway.put("CONTRACT_NO", contKeiNo);
		paramPayway.put("SETTLEMENT_WAY_NO", paywayCd);
		paramPayway.put("SETTLEMENT_WAY_ID", paywayId);
		paramPayway.put("UPDATE_ID", updId);
		paramPayway.put("UPDATE_NAME", updNm);
		paramPayway.put("UPDATE_DATE", updDtm);

		// リクエスト送信先の取得
		String url = JCCModelCommon.getApplicationConst("CCMG_API_URL");
		String apiName = JCCModelCommon.getApplicationConst("CCMG_API_UPD_PWD");
		String proxyHost   = null;
		Integer proxyPort  = null;
		Long timeout       = new Long(JCCModelCommon.getApplicationConst("CCMG_API_TIMEOUT"));
		int retryCnt       = Integer.parseInt(JCCModelCommon.getApplicationConst("CCMG_API_RETRY_CNT"));
		int retryInterval  = Integer.parseInt(JCCModelCommon.getApplicationConst("CCMG_API_RETRY_INTERVAL"));;
		String methodType  = "POST";
		String encoding    = "UTF-8";

		String errorCd = "";
		
		try
		{
			// リクエスト送信
			String[] response = JCKLcsRenkeiUtil.sendHttpRequest(url+apiName, proxyHost, 
					proxyPort, timeout, retryCnt, retryInterval, methodType, encoding, paramPayway);

			// 処理結果の取得
			String httpStatus   = response[0];
			String responseXml = response[1];
			
			
			JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "決済方法変更API(CCMG)httpStatus=" + httpStatus);
			
			if ("200".equals(httpStatus)) {
				int cnt = responseXml.indexOf("<ERR_CD>");
				errorCd = responseXml.substring(cnt+8, cnt+13);
				
				JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), "決済方法変更API(CCMG)ERR_CD=" + errorCd);
			}
//			if ("00000".equals(errorCd))
//			{
//				result = 1;
//			}
//			else
//			{
//				result = -1;
//			}
		}
		catch (Exception e)
		{
//			result = -1;
			errorCd = "99999";
			JSYejbLog.println(JSYejbLog.ERROR, this.getClass(), "決済方法変更API(CCMG)のリクエストに失敗しました");
			return errorCd;
		}
		
		return errorCd;
	}

	/**
	 * CCMG決済方法変更APIへ設定するパラメータのデータ型をCAANMsg→String配列に変換します。
	 * @param inCBSMsg
	 * @return パラメータ(String配列)
	 */
	private String[] makeParamCcmgApi(CAANMsg inCBSMsg){
		
		String[] params = new String[]{
			inCBSMsg.getString(ECNA0020001CBSMsg.SYSID),
			inCBSMsg.getString(ECNA0020001CBSMsg.CONT_KEI_NO),
			inCBSMsg.getString(ECNA0020001CBSMsg.PAYWAY_NO),
			inCBSMsg.getString(ECNA0020001CBSMsg.CRECARD_ID),
			inCBSMsg.getString(ECNA0020001CBSMsg.ISP_KSSAI_SVC_KEI_NO),
			inCBSMsg.getString(ECNA0020001CBSMsg.UPD_OPEACNT),
			inCBSMsg.getString(ECNA0020001CBSMsg.UPD_OPE_NM),
			inCBSMsg.getString(ECNA0020001CBSMsg.UPD_DTM)
		};

		return params;
	}

}
