/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKCtrlMvsoSvcKeiInfoStubImpl
 *   ソースファイル名：JKKCtrlMvsoSvcKeiInfoStubImpl.java
 *   作成者          ：富士通
 *   日付            ：2013年12月17日
 *＜機能概要＞
 *   MVNOサービス契約お客様変更 SOAP連携（抽象）コマンド発行部品です。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v8.00.00	2013/12/17	 FJ) 稲岡	 【ANK-1584-00-00】対応 L2-MVNO(本体)
 * 	v28.00.00	2016/10/28	 FJ）二村	 【ANK-3033-00-00】対応
 *  v29.00.00   2017/04/21	 FJ)クウン	【ANK-3132-00-00】バックヤード画面へのコンテンツ同意登録機能の追加
 **********************************************************************/
package eo.ejb.common;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EKKA0030001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0030002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0060001CBSMsg1List;

public class JKKCtrlMvnoSvcKeiInfoStubImpl extends JKKCtrlMvnoSvcKeiInfo {

	private static JKKCtrlMvnoSvcKeiInfoStubImpl instance = null;
	private Connection connection = null;
	
	private static final String SQL_UPDATE_0001 = " UPDATE MV_T_SVC_KEI SET " +
													 " SYSID = ? ," +
													 " MOD_DTTM = SYSDATE"+
													 " WHERE  SVC_KEI_NO = ? ";
	// ▼▼ ANK-3033-00-00 ADD START ▼▼
	private static final String SQL_SELECT_0002 = " SELECT MINEO_MAIL_ADDRESS, SVC_STATUS" +
													" FROM   MV_T_MINEO_MLAD" +
													" WHERE  SVC_KEI_NO = ? " ;

//---------v29.00.00 ANK-3132-00-00 ADD START---------//
	private static final String SQL_SELECT_0003 = " SELECT SVC_KEI_NO, SYSID, RETURNCODE" +
													" FROM   MV_MINEO_JOTO_KAHI" +
													" WHERE  SVC_KEI_NO = ? " ;
//---------v29.00.00 ANK-3132-00-00 ADD END-----------//
	/**
	 * サービスインターフェイスID
	 */
	private static final String SVC_IF_ID_EKKA0030002 = "EKKA0030002";

//---------v29.00.00 ANK-3132-00-00 ADD START---------//
	/**
	 * サービスインターフェイスID
	 */
	private static final String SVC_IF_ID_EKKA0060001 = "EKKA0060001";
	/**
//---------v29.00.00 ANK-3132-00-00 ADD END-----------//
	 * コマンド実行結果
	 */
	private static final String CMD_RESULT_CD = "CMD_RESULT_CD";

	/**
	 * エラーメッセージ
	 */
	private static final String CMD_ERROR_MESSAGE = "CMD_ERROR_MESSAGE";
	// ▲▲ ANK-3033-00-00 ADD END ▲▲
	private AgentDispatchContext inContext;
	
	public void setInContext(AgentDispatchContext inContext) {
		this.inContext = inContext;
	}
	
	/**
	 * インスタンス取得用のメソッド
	 * 
	 * @return JKKCtrlMvnoSvcKeiInfoStubImpl
	 */
	public static JKKCtrlMvnoSvcKeiInfoStubImpl getInstance() {
		synchronized (JKKCtrlMvnoSvcKeiInfoStubImpl.class) {
			if(instance == null) 
			{
				JKKCtrlMvnoSvcKeiInfoStubImpl.instance= new JKKCtrlMvnoSvcKeiInfoStubImpl();
			}
		}
		
		return instance;
	}
	
	/**
	 * コマンド発行部品
	 * 
	 * @param serviceMap サービスマップハッシュテーブル
	 * @return Hashtable サービスマップ戻り値
	 */
	@Override
	@SuppressWarnings("unchecked")
	public Map ctrlMvnoInfo_KKA0003(Map serviceMap) throws Exception 
	{
		// ▼▼ ANK-3033-00-00 ADD START ▼▼
		//"EKKA0030001"のサービスインターフェイスは、serviceMapにTEMPLATEIDを保持していないため、NullBrankで判別
		if (JKKStringUtil.isNullBlank((String)serviceMap.get(JKKCtrlMvnoSvcKeiInfo.TEMPLATEID)))
		{
			this.connection = JSYejbConnection.getConnection("MV_T_SVC_KEI");
		}
		else if (SVC_IF_ID_EKKA0030002.equals((String)serviceMap.get(JKKCtrlMvnoSvcKeiInfo.TEMPLATEID)))
		{
			this.connection = JSYejbConnection.getConnection("MV_T_MINEO_MLAD");
		}
		// ▲▲ ANK-3033-00-00 ADD END ▲▲	

//---------v29.00.00 ANK-3132-00-00 ADD START---------//
		else if (SVC_IF_ID_EKKA0060001.equals((String)serviceMap.get(JKKCtrlMvnoSvcKeiInfo.TEMPLATEID)))
		{
			this.connection = JSYejbConnection.getConnection("MV_MINEO_JOTO_KAHI");
		}
//---------v29.00.00 ANK-3132-00-00 ADD END-----------//		
		// TODO 自動生成されたメソッドスタブ
		if(this.connection == null)
		{
			// エラー
			throw new Exception("");
		}
		
		// ▼▼ ANK-3033-00-00 DEL START ▼▼
		//		Hashtable<String, Object> ret = new Hashtable<String, Object>();
		//
		//
		//String sysid = (String)serviceMap.get(EKKA0030001CBSMsg.SYSID);
		//String svcKeiCd = (String)serviceMap.get(EKKA0030001CBSMsg.SVC_KEI_NO);
		//
		//if(null != svcKeiCd && !"".equals(svcKeiCd))
		//{
		//	if(null != sysid && !"".equals(sysid))
		//	{
		// ▲▲ ANK-3033-00-00 DEL END ▲▲
		// Stub用ＳＱＬ実行（ＪＤＢＣ）を行う。
		PreparedStatement prstmt = null;
		StringBuffer sql = new StringBuffer();
		
		int columnnum = 1;
		
		// ▼▼ ANK-3033-00-00 DEL START ▼▼
		//		sql.append(SQL_UPDATE_0001);
		//		try 
		//		{
		//			prstmt = this.connection.prepareStatement(sql.toString());
		//			
		//			prstmt.setString(columnnum, sysid);
		//			columnnum++;
		//			prstmt.setString(columnnum, svcKeiCd);
		//		}
		//		finally
		//		{
		//			if(prstmt != null)
		//			{
		//				prstmt.close();
		//			}
		//		}
		//	}
		//}
		//
		//return ret;
		// ▲▲ ANK-3033-00-00 DEL END ▲▲
		// ▼▼ ANK-3033-00-00 ADD START ▼▼
		//EKKA0030002で使用するマップを定義
		List<Map<String, Object>> serviceifList = (List<Map<String, Object>>) serviceMap.get(JKKCtrlMvnoSvcKeiInfo.SERVICEIF);
		Hashtable<String, Object> resultMap = new Hashtable<String, Object>();

		// 正常終了を設定
		resultMap.put(CMD_RESULT_CD, "0");
		resultMap.put(RETURN_CD, "0000");
		resultMap.put(ERROR_LEVEL, "000");

		try 
		{
			//サービスインターフェイスによる分岐
			//"EKKA0030001"のサービスインターフェイスは、serviceMapにTEMPLATEIDを保持していないため、NullBrankで判別
			if (JKKStringUtil.isNullBlank((String)serviceMap.get(JKKCtrlMvnoSvcKeiInfo.TEMPLATEID)))
			{	
				String sysid = (String)serviceMap.get(EKKA0030001CBSMsg.SYSID);		
				String svcKeiCd = (String)serviceMap.get(EKKA0030001CBSMsg.SVC_KEI_NO);

				if(null != svcKeiCd && !"".equals(svcKeiCd))
				{
					if(null != sysid && !"".equals(sysid))
					{
						sql.append(SQL_UPDATE_0001);
						prstmt = this.connection.prepareStatement(sql.toString());

						prstmt.setString(columnnum, sysid);
						columnnum++;
						prstmt.setString(columnnum, svcKeiCd);
					}
				}
			}
			else if(SVC_IF_ID_EKKA0030002.equals((String)serviceMap.get(JKKCtrlMvnoSvcKeiInfo.TEMPLATEID)))
			{		
				if(null != serviceifList && !serviceifList.isEmpty())
				{
					String svc_kei_no = (String)serviceifList.get(0).get("svc_kei_no");

					sql.append(SQL_SELECT_0002);
					ResultSet rs = null;

					prstmt = this.connection.prepareStatement(sql.toString());

					prstmt.setString(columnnum, svc_kei_no);

					rs = prstmt.executeQuery();

					if (rs.next())
					{
						// mineoメールアドレス
						serviceifList.get(0).put(EKKA0030002CBSMsg1List.MINEOMAILADDRESS, JKKStringUtil.nullToBlank(rs.getString("MINEO_MAIL_ADDRESS")));
						// サービスステータス
						serviceifList.get(0).put(EKKA0030002CBSMsg1List.SVCSTATUS, JKKStringUtil.nullToBlank(rs.getString("SVC_STATUS")));
					}		
					// "service_if"をキーとして格納
					Hashtable<String, Object> serviceIfMap = new Hashtable<String, Object>();
					serviceIfMap.put(JKKCtrlMvnoSvcKeiInfo.SERVICEIF, serviceifList);

					// 識別コードをキーとしてList形式で格納
					List<Hashtable<String, Object>> serviceIfMapList = new ArrayList<Hashtable<String, Object>>();
					serviceIfMapList.add(serviceIfMap);
					resultMap.put((String)serviceMap.get(JKKCtrlMvnoSvcKeiInfo.SERVICEIFID), serviceIfMapList);
					
				}
			}
//---------v29.00.00 ANK-3132-00-00 ADD START---------//
			else if(SVC_IF_ID_EKKA0060001.equals((String)serviceMap.get(JKKCtrlMvnoSvcKeiInfo.TEMPLATEID)))
			{		
				if(null != serviceifList && !serviceifList.isEmpty())
				{
					String svc_kei_no = (String)serviceifList.get(0).get("svc_kei_no");

					sql.append(SQL_SELECT_0003);
					ResultSet rs = null;

					prstmt = this.connection.prepareStatement(sql.toString());

					prstmt.setString(columnnum, svc_kei_no);

					rs = prstmt.executeQuery();
					// リターンコードを設定する
					String mineoReturnCode = null;
					
					if (rs.next())
					{
						// mineo譲渡可否情報
						serviceifList.get(0).put(EKKA0060001CBSMsg1List.RESULT_JOTO_KAHI_FLG, JKKStringUtil.nullToBlank(rs.getString("RETURNCODE")));
						mineoReturnCode = JKKStringUtil.nullToBlank(rs.getString("RETURNCODE"));
						resultMap.put(RETURN_CD, mineoReturnCode);
					}		
					// "service_if"をキーとして格納
					Hashtable<String, Object> serviceIfMap = new Hashtable<String, Object>();
					serviceIfMap.put(JKKCtrlMvnoSvcKeiInfo.SERVICEIF, serviceifList);

					// 識別コードをキーとしてList形式で格納
					List<Hashtable<String, Object>> serviceIfMapList = new ArrayList<Hashtable<String, Object>>();
					serviceIfMapList.add(serviceIfMap);
					resultMap.put((String)serviceMap.get(JKKCtrlMvnoSvcKeiInfo.SERVICEIFID), serviceIfMapList);	
				}
			}
//---------v29.00.00 ANK-3132-00-00 ADD END-----------//
			else
			{
				throw new Exception();
			}
		}
		catch (SQLException e)
		{
			e.printStackTrace();
			resultMap.put(CMD_RESULT_CD, "1");
			resultMap.put(CMD_ERROR_MESSAGE, "MVNO連携独自処理部品（検証環境用）でエラーが発生しました。" + e.getMessage());


		}
		finally
		{
			try
			{
				if(prstmt != null)
				{
					prstmt.close();
				}
				if(this.connection != null)
				{
					CAANConnectionMgr.getInstance().close(this.connection);
				}
			}
			catch (SQLException e)
			{
				e.printStackTrace();
				resultMap.put(CMD_RESULT_CD, "1");
				resultMap.put(CMD_ERROR_MESSAGE, "MVNO連携独自処理部品（検証環境用）でエラーが発生しました。" + e.getMessage());
			}
		}
		return resultMap;
		// ▲▲ ANK-3033-00-00 ADD END ▲▲		
	}
	
	@Override
	public void setConnection(Connection con)
	{
		this.connection = con;
	}
	public Connection getConnection()
	{
		return this.connection;
	}
	
}
