/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：KUIFE081
*   ソースファイル名：KUIFE081.java
*   作成者          ：富士通
*   日付            ：2023年1月24日
*＜機能概要＞
*   外部I/F：「KUIFE081_工事進捗状況照会」受付処理クラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v64.00.00    2023/1/24   FJ)西川     新規作成
*
**********************************************************************/
package local.gyomu.api;

import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;

import local.gyomu.ApiServerLocalBase;
import local.gyomu.api.common.ApiBpInterface;

import com.k_opti.api_parts.server.bean.ApiServerPartsBean;
import com.k_opti.api_parts.server.exception.ApiServerExceptionGyomuErr;

/**
 * 外部I/F：「KUIFE081_工事進捗状況照会」受付処理クラスです。<br>
 */
@Path("KUIFE081")
public class KUIFE081 extends ApiServerLocalBase
{

	/**
	 * APIID
	 */
	private static final String APIID = "KUIFE081";

	/**
	 * 呼び出す業務サービスID
	 */
	private static final String SERVICE_ID = "KUSV0036";

	/**
	 * JOBID
	 */
	private static final String JOB_ID = "KUIFE081";

	/**
	 * AUTHID(eoアプリ(モバイルアプリ)向け)
	 */
	private static final String AUTH_ID_EAMA = "eoforeama";

	/**
	 * 相手先システムID(eoアプリ(モバイルアプリ)向け)
	 */
	private static final String SYSTEM_ID_EAMA = "EAM1";

	/**
	 * AUTHID(eoアプリ(フロントサーバー)向け)
	 */
	private static final String AUTH_ID_EAFS = "eoforeafs";

	/**
	 * 相手先システムID(eoアプリ(フロントサーバー)向け)
	 */
	private static final String SYSTEM_ID_EAFS = "EAF1";

	/**
	 * AUTHID(CMP向け)
	 */
	private static final String AUTH_ID_CMP = "eoforcmp";

	/**
	 * 相手先システムID(CMP向け)
	 */
	private static final String SYSTEM_ID_CMP = "CMP1";

	/**
	 * AUTHID(Mobiエージェント向け)
	 */
	private static final String AUTH_ID_MOBI = "eoformobi";

	/**
	 * 相手先システムID(Mobiエージェント向け)
	 */
	private static final String SYSTEM_ID_MOBI = "OPS1";

	/**
	 * AUTHID(watson向け(LINE))
	 */
	private static final String AUTH_ID_WTSN = "eoforwtsn";

	/**
	 * 相手先システムID(watson向け(LINE))
	 */
	private static final String SYSTEM_ID_WTSN = "API1";

	/**
	 * 公開メソッド
	 *
	 * @pram pRequest リクエスト
	 * @pram pContext コンテキスト
	 * @return Response レスポンス
	 * @throws Exception
	 */
	@POST
	public Response execute(@Context final HttpServletRequest pRequest, @Context final ServletContext pContext) throws Exception
	{

		/************************************************************
		 * ■■■基盤ロジック呼出■■■■■■■■■■■■■■■■■
		 ***********************************************************/

		// API共通部品呼出
		Response response = super.exec(APIID, pRequest, pContext);

		return response;
	}

	/**
	 * 業務ロジック処理
	 *
	 * @param reqPartsBean サーバ業務AP連携データ(リクエスト)
	 * @return ApiServerPartsBean サーバ業務AP連携データ(レスポンス)
	 * @throws Exception
	 */
	@Override
	protected ApiServerPartsBean run(ApiServerPartsBean reqPartsBean) throws Exception
	{

		// レスポンスデータ生成
		ApiServerPartsBean resPartsBean = this.logicExecute(reqPartsBean);

		/************************************************************
		 * ■■■基盤ロジック呼出■■■■■■■■■■■■■■■■■
		 ***********************************************************/
		return resPartsBean;
	}

	/**
	 * 業務ロジックメイン処理
	 * 指定されたサービスを呼び出し、結果をレスポンス情報に設定します。
	 *
	 * @param reqPartsBean サーバ業務AP連携データ(リクエスト)
	 * @return ApiServerPartsBean サーバ業務AP連携データ(レスポンス)
	 * @throws Exception
	 */
	private ApiServerPartsBean logicExecute(ApiServerPartsBean reqPartsBean) throws Exception
	{

		// サービス呼び出し
		String serviceId = SERVICE_ID;

		String authId = (String)reqPartsBean.getHeader().get("authId");
		String systemId = null;

		if (AUTH_ID_EAMA.equals(authId))
		{
			// 相手先システムID(eoアプリ(モバイルアプリ)向け)
			systemId = SYSTEM_ID_EAMA;
		}
		else if (AUTH_ID_EAFS.equals(authId))
		{
			// 相手先システムID(eoアプリ(フロントサーバー)向け)
			systemId = SYSTEM_ID_EAFS;
		}
		else if (AUTH_ID_CMP.equals(authId))
		{
			// 相手先システムID(CMP向け)
			systemId = SYSTEM_ID_CMP;
		}
		else if (AUTH_ID_MOBI.equals(authId))
		{
			// 相手先システムID(Mobiエージェント向け)
			systemId = SYSTEM_ID_MOBI;
		}
		else
		{
			// 相手先システムID(watson向け(LINE))
			systemId = SYSTEM_ID_WTSN;
		}

		Map<String, Object> outMap = callBpService2(serviceId, reqPartsBean, JOB_ID, systemId);

		// サービス処理の結果
		Map<String, Object> resultMap = (Map<String, Object>)outMap.get(serviceId + _01CC);

		// 業務データMapからエラー情報を取得する。
		Object errInfo = resultMap.get(ApiBpInterface.ERROR_INFO);

		if (errInfo != null && errInfo instanceof List<?>)
		{
			List<Object> errList = (List<Object>)errInfo;

			// reqPartsBeanにそのまま設定する
			reqPartsBean.setErrList(errList);

			// 業務データMapからエラー情報を削除する
			resultMap.remove(ApiBpInterface.ERROR_INFO);

			// レスポンス情報をセット
			reqPartsBean.setBody(resultMap);

			throw new ApiServerExceptionGyomuErr(reqPartsBean);
		}

		// レスポンス情報をセット
		ApiServerPartsBean resPartsBean = new ApiServerPartsBean();
		resPartsBean.setBody(resultMap);

		return resPartsBean;
	}
}
