package com.cim.idm.util;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cim.idm.framework.util.time.TimeStampUtil;
import com.cim.idm.wmsextend.generic.util.CommonValidation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@Slf4j
@Service(value = "ToSAPMessageUtil")
public class ToSAPMessageUtil {

	static String WebUrl = "";
	static String UserName = "";
	static String Password = "";
	static String factory = "";
	static String ERPSender="";

	static String undoIDPath="";
	static String undoIDElement="";
	static String TqmsPath="";
	static String TqmsName="";
	static String TqmsPWD="";

	static String HQWebUrl = "";
	static String HQUserName = "";
	static String HQPassword = "";

	/**
	 * MM
	 */
	static String M6WebUrl = "";
	static String M6UserName = "";
	static String M6Password = "";

	/**
	 * SD 1
	 */
	static String SDWebUrlLG14 = "";
	static String SDUserNameLG14 = "";
	static String SDPasswordLG14 = "";

	/**
	 * SD 2
	 */
	static String SDWebUrlLG16 = "";
	static String SDUserNameLG16 = "";
	static String SDPasswordLG16 = "";

	/**
	 * PP
	 */
	static String SDWebUrl10176 = "";
	static String SDUserName10176 = "";
	static String SDPassword10176 = "";


	// SDK
	// 获取接口返回token
	public static String authStr = "";
	//	public static String baseUrl = "http://172.22.10.53:8101/RESTAdapter/OAuthServer";
//	public static String baseUrl = "http://172.22.10.53:8003/RESTAdapter/OAuthServer";
//	public static String DNUrl = "http://172.22.10.53:51000/RESTAdapter/sd023/api";

//	内网地址
	public static String baseUrl = "http://172.22.10.53:51000/RESTAdapter/OAuthServer";   // 内网
	public static String DNUrl = "http://172.22.10.53:51000/RESTAdapter/sd023/api";// 内网 // DN回传接口
	public static String materialChangeLocationUrl = "http://172.22.10.53:51000/RESTAdapter/mm067/api";  // 货物移动接口
	public static String materilUndoUrl = "http://172.22.10.53:51000/RESTAdapter/mm068/api";  // 物料凭证冲销接口

	// 外网地址
//	public static String baseUrl = "http://218.93.237.50:51000/RESTAdapter/OAuthServer";
//	public static String DNUrl = "http://218.93.237.50:51000/RESTAdapter/sd023/api";
//	public static String materialChangeLocationUrl = "http://218.93.237.50:51000/RESTAdapter/mm067/api";
//	public static String materilUndoUrl = "http://218.93.237.50:51000/RESTAdapter/mm068/api";
	public static String userName = "";

	public static String sd023(String user, Map<String,?> bodyData, List<Map<String,Object>> itemsData) {
		try {
			JSONObject sendData = new JSONObject(true);
			JSONObject header = new JSONObject(true);
			sendData.put("HEAD",header);
			JSONObject body = new JSONObject(true);
			sendData.put("BODY",body);
			JSONArray itemArray = new JSONArray();
			body.put("ITEM",itemArray);
			/*
			 * HEAD
			 * INTF_ID 接口名称
			 * SRC_SYSTEM 源系统 
			 * DEST_SYSTEM 目标系统 
			 * SRC_MSGID 消息ID 
			 * BACKUP1 控制预留1 
			 * BACKUP2 控制预留2
			 */
			header.put("INTF_ID","SD023");
			header.put("DEST_SYSTEM","SAP");
			header.put("SRC_SYSTEM","WMS");
			String uniqueID = UUID.randomUUID().toString();
			header.put("SRC_MSGID",uniqueID);
			header.put("BACKUP1","");
			header.put("BACKUP2","");
			/*
			 * Z_OPTION   操作类型
			 * VBELN      交货单号
			 * WADAT_IST  实际过账日期
			 * Z_SENDDATE 发送日期
			 */
			body.put("Z_OPTION", bodyData.get("Z_OPTION"));
			body.put("VBELN", bodyData.get("VBELN"));
			body.put("WADAT_IST", TimeStampUtil.getCurrentTime("yyyyMMdd"));
			body.put("Z_SENDDATE", TimeStampUtil.getCurrentTime("yyyyMMdd"));
			if(itemsData.size() ==1) {
				body.put("POSNR", itemsData.get(0).get("POSNR"));
				body.put("PIKMG", itemsData.get(0).get("PIKMG"));
				body.put("LGORT", itemsData.get(0).get("LGORT"));
				body.put("Z_ROL", itemsData.get(0).get("Z_ROL"));
				body.put("Z_SQUE", itemsData.get(0).get("Z_SQUE"));
			} else {
				for (Map<String, Object> mm : itemsData) {
					/*
					 * POSNR     交货单行号
					 * PIKMG     交货数量
					 * LGORT     库存地点
					 * Z_ROL     实际发货卷数
					 * Z_SQUE    实际发货平方米
					 */
				    JSONObject item = new JSONObject(true);
				    item.put("POSNR", mm.get("POSNR"));
				    item.put("PIKMG", mm.get("PIKMG"));
				    item.put("LGORT", mm.get("LGORT"));
				    item.put("Z_ROL", mm.get("Z_ROL"));
				    item.put("Z_SQUE", mm.get("Z_SQUE"));
				    itemArray.add(item);
				}
			}
			log.info("SendTOSAP >>>>"+sendData);
			return sendData.toJSONString();
		}catch(Exception e) {
			log.error("发给SAP的消息拼装异常:"+e.getMessage(),e);
			throw e;
		}
	}
	
	/**
	 * 货物移动接口MM067消息 <br/>
	 * 将数据转换成 JSON消息传给SAP
	 * @param user 操作人员
	 * @param bodyData  
	 * @param itemsData
	 * @return JSON消息字符串
	 */
	public static String mm067(String user, Map<String,?> bodyData, List<Map<String,Object>> itemsData){
		try {

			JSONObject sendData = new JSONObject(true);
			JSONObject header = new JSONObject(true);
			sendData.put("HEAD",header);
			JSONObject body = new JSONObject(true);
			sendData.put("BODY",body);
			JSONArray itemArray = new JSONArray();
			body.put("ITEM",itemArray);
			/*
	 		HEAD
	 		INTFID   指定什么接口  MM067
	 		REQ_KEYID   接口唯一ID 
	 		SRC_MSGID   XI：消息标识 
	 		SRC_SYSTEM   发送方系统  WMS 
	 		DEST_SYSTEM   目标系统，接收方系统 SAP
	 		REQUSER     用户名 
	 		BACKUP1     备注1
	 		BACKUP2     备注2
			*/
			header.put("INTF_ID","MM067");
			//uniqueID
			String uniqueID = UUID.randomUUID().toString();
			header.put("REQ_KEYID",uniqueID);
			header.put("SRC_MSGID",uniqueID);
			header.put("SRC_SYSTEM","WMS");
			header.put("DEST_SYSTEM","SAP");
			header.put("REQUSER",user);
			header.put("BACKUP1","");
			header.put("BACKUP2","");


			/*
			BODY
			
			ITEMID
			BUDAT	过账日期
			BLDAT	凭证日期
			BKTXT	凭证抬头文本
			USNAM	用户名
			ZFLAG   标识
			ZRSV01	预留字段01
			ZRSV02	预留字段02
			ZRSV03	预留字段03
			ZRSV04	预留字段04
			ZRSV05	预留字段05
			ZRSV06	预留字段06
			ZRSV07	预留字段07
			ZRSV08	预留字段08
			ZRSV09	预留字段09
			ZRSV10	预留字段10

			 */
			body.put("ITEMID",uniqueID);
			//过账日期
			body.put("BUDAT",TimeStampUtil.getCurrentTime("yyyyMMdd"));
			//凭证日期
			body.put("BLDAT",TimeStampUtil.getCurrentTime("yyyyMMdd"));
			//凭证抬头文本
			body.put("BKTXT",StringUtils.isEmpty((String)bodyData.get("BKTXT"))?uniqueID:bodyData.get("BKTXT"));
			//用户名
			body.put("USNAM",user);
			//标识
			body.put("ZFLAG","");
			body.put("ZRSV01",bodyData.get("ZRSV01")==null?"":bodyData.get("ZRSV01"));
			body.put("ZRSV02",bodyData.get("ZRSV02")==null?"":bodyData.get("ZRSV02"));
			body.put("ZRSV03",bodyData.get("ZRSV03")==null?"":bodyData.get("ZRSV03"));
			body.put("ZRSV04",bodyData.get("ZRSV04")==null?"":bodyData.get("ZRSV04"));
			body.put("ZRSV05",bodyData.get("ZRSV05")==null?"":bodyData.get("ZRSV05"));
			body.put("ZRSV06",bodyData.get("ZRSV06")==null?"":bodyData.get("ZRSV06"));
			body.put("ZRSV07",bodyData.get("ZRSV07")==null?"":bodyData.get("ZRSV07"));
			body.put("ZRSV08",bodyData.get("ZRSV08")==null?"":bodyData.get("ZRSV08"));
			body.put("ZRSV09",bodyData.get("ZRSV09")==null?"":bodyData.get("ZRSV09"));
			body.put("ZRSV10",bodyData.get("ZRSV10")==null?"":bodyData.get("ZRSV10"));



			for (Map<String, Object> mm : itemsData) {
			    JSONObject item = new JSONObject(true);
			    /*
			    MATNR 发货物料号
			    UMMAT 收货物料   移动类型是 309、311、312、输入值，其他传空
			    WERKS	发货工厂
			    UMWRK	收货工厂
			    LGORT	发货库存地点
			    UMLGO	收货库存地点
			    BWART  移动类型
			    SOBKZ	特殊库存标识
     			LIFNR	供应商编码
				MENGE	数量
				MEINS	单位
				BPMNG	采购价格单位数量
				BPRME	采购价格单位
				EBELN	采购订单编码
				EBELP	采购订单项目编码
				SGTXT	项目文本
				KOSTL	成本中心
				MAT_KDAUF	发货销售订单编码
				MAT_KDPOS	发货销售订单项目编码
				UMMAT_KDAUF	收货销售订单编码
				UMMAT_KDPOS	收货销售订单项目编码
				ELIKZ	交货已完成标识
				AUFNR	订单号
				AUFPS	订单项目编号
				RSNUM	预留/相关需求的编号
				RSPOS	预留/相关需求的项目编号
				RSART	记录类型
				KZEAR	该预留的最后发货
				UMMAT	收货物料
				UMCHA	收货/发货批量
				PRCTR	利润中心
				KZBEW	移动标识
				GRUND	移动原因
				SAKTO	总帐科目编号
				ZLLORDER	自定义领料单号
				ZLLITEM	自定义领料单行号
				INSMK	库存类型
				VBELN_IM	交货单
				VBELP_IM	交货单项目
				ZRSV01	预留字段01
				ZRSV02	预留字段02
				ZRSV03	预留字段03
				ZRSV04	预留字段04
				ZRSV05	预留字段05
				ZRSV06	预留字段06
				ZRSV07	预留字段07
				ZRSV08	预留字段08
				ZRSV09	预留字段09
				ZRSV10	预留字段10
				*/

			    item.put("MATNR", mm.get("MATNR")==null?"":mm.get("MATNR"));
			    item.put("UMMAT", mm.get("UMMAT")==null?"":mm.get("UMMAT"));
			    item.put("UMLGO", mm.get("UMLGO")==null?"":mm.get("UMLGO"));
			    item.put("LGORT", mm.get("LGORT")==null?"":mm.get("LGORT"));
			    item.put("UMWRK", mm.get("UMWRK")==null?"":mm.get("UMWRK"));
			    item.put("WERKS", mm.get("WERKS")==null?"":mm.get("WERKS"));
			    /*
		      		101：采购订单/生产工订单收货
					102：采购订单原单退货/生产工单入库冲销
					161：退货采购订单收货
					162：退货采购订单原单退货（162BAPI传参移动类型需传102）
					201：成本中心领料
					202：成本中心退料
					261:生产订单发料
					262:生产订单发料-冲销
					309：物料转物料
					310：物料转物料-冲销
					311：库存地点调拨 （工厂内）
					312：库存地点调拨-冲销
					321：TF质量到非限制
					322：TR 质量到非限制
					343：TF冻结到非限制
					344：TR 冻结到非限制
					349：TF 冻结到质检
					350：TR 冻结到质检
					411K：供应商寄售转自有
					412K：自有库存转K库存
					411E：从E库存转非限制
					413:从非限制转E库存
					413E：从E库存转E库存
					531：副产品入库
					532：副产品入库-冲销
					541O：委外发料
					542O：委外退料
					Z05盘亏
					Z06盘盈
					Z61研发领料(内部订单)
					Z62研发退料(内部订单)
					Z63调机领料(内部订单)
					Z64调机领料(内部订单)
					Z07 降级品出库
					Z08 RE降级品出库
			     */
			    String mmtype = mm.get("BWART")==null?"":(String)mm.get("BWART");
			    item.put("BWART", mm.get("BWART")==null?"":mm.get("BWART"));
			    /*
			        移动类型为三位代码，备注了字母的需要在特殊库存标识字段输入对应字母
					O：分包库存
					E：销售订单库存
					K：供应商寄售库存
			     */
			    if(StringUtils.isNotEmpty(mmtype) && mmtype.length()==4) {
			    	item.put("SOBKZ",mmtype.substring(3, 4));
			    } else {
			    	item.put("SOBKZ","");
			    }
			    /*
			     * LIFNR	供应商编码
			     * 411、411k、412k 、541O、542O输入，其他传空
			     */
			    item.put("LIFNR", mm.get("LIFNR")==null?"":mm.get("LIFNR"));
			    /*
			     * MENGE	数量
			     * 当单位是采购订单单位时，输入对应实际数量
			     */
			    item.put("MENGE", mm.get("MENGE")==null?"":mm.get("MENGE"));
			    /*
			     * MEINS	单位
			     * 基于采购订单的业务输入采购订单单位，其他输入基本单位
			     */
			    item.put("MEINS", mm.get("MEINS")==null?"":mm.get("MEINS"));
			    /*
			     * BPMNG 采购价格单位数量
			     * 采购订单价格单位与采购订单单位不一致时，输入实际采购价格单位数量
			     */
			    item.put("BPMNG", mm.get("BPMNG")==null?"":mm.get("BPMNG"));
			    item.put("BPRME", mm.get("BPRME")==null?"":mm.get("BPRME"));
			    /*
			     * BPRME	采购价格单位
			     * 
			     */
			    item.put("SGTXT", mm.get("SGTXT")==null?"":mm.get("SGTXT"));
			    /*
			     * EBELN	采购订单编码
			     * 移动类型是101、102、161、162必输入
			     */
			    item.put("EBELN", mm.get("EBELN")==null?"":mm.get("EBELN"));
			    /*
			     * EBELP	采购订单项目编码
			     * 移动类型是101、102、161、162必输入
			     */
			    item.put("EBELP", mm.get("EBELP")==null?"":mm.get("EBELP"));
			    /*
			     * SGTXT	项目文本
			     */
			    item.put("SGTXT", mm.get("SGTXT")==null?"":mm.get("SGTXT"));
			    /*
			     * KOSTL	成本中心
			     * 移动类型201、202、Z05、Z06输入，其他传空
			     */

			    item.put("KOSTL", mm.get("KOSTL")==null?"":mm.get("KOSTL"));

			    /*
			     * 	MAT_KDAUF	发货销售订单编码
			     *  MAT_KDPOS	发货销售订单项目编码
			     *  E库存更换销售订单号
			     *  移动类型411E、413E输入，其他传空
			     */
			    item.put("MAT_KDAUF", mm.get("MAT_KDAUF")==null?"":mm.get("MAT_KDAUF"));
			    item.put("MAT_KDPOS", mm.get("MAT_KDPOS")==null?"":mm.get("MAT_KDPOS"));
			    /*
			     * UMMAT_KDAUF	收货销售订单编码
			     * UMMAT_KDPOS	收货销售订单项目编码
			     * 413、413E输入，其他传空
			     */
			    item.put("UMMAT_KDAUF", mm.get("UMMAT_KDAUF")==null?"":mm.get("UMMAT_KDAUF"));
			    item.put("UMMAT_KDPOS", mm.get("UMMAT_KDPOS")==null?"":mm.get("UMMAT_KDPOS"));
			    
			    /*
			     * ELIKZ	交货已完成标识
			     */
			    item.put("ELIKZ", mm.get("ELIKZ")==null?"":mm.get("ELIKZ"));
			    /*
			     * AUFNR	订单号
			     * 261、262输入生产订单号；Z61、Z62、Z63、Z64输入内部订单号，其他传空
			     */
			    item.put("AUFNR", mm.get("AUFNR")==null?"":mm.get("AUFNR"));
			    /*
			     * AUFPS 订单项目编号
			     */
			    item.put("AUFPS", mm.get("AUFPS")==null?"":mm.get("AUFPS"));
			    /*
			    RSNUM	预留/相关需求的编号
			    RSPOS	预留/相关需求的项目编号
			    RSART	记录类型
			    KZEAR	该预留的最后发货
			    UMMAT	收货物料
			    UMCHA	收货/发货批量
			    PRCTR	利润中心
			    KZBEW	移动标识
			    GRUND	移动原因
			    SAKTO	总帐科目编号
				*/
			    item.put("RSNUM", mm.get("RSNUM")==null?"":mm.get("RSNUM"));
			    item.put("RSPOS", mm.get("RSPOS")==null?"":mm.get("RSPOS"));
			    item.put("RSART", mm.get("RSART")==null?"":mm.get("RSART"));
			    item.put("KZEAR", mm.get("KZEAR")==null?"":mm.get("KZEAR"));
			    item.put("UMMAT", mm.get("UMMAT")==null?"":mm.get("UMMAT"));
			    item.put("UMCHA", mm.get("UMCHA")==null?"":mm.get("UMCHA"));
			    item.put("PRCTR", mm.get("PRCTR")==null?"":mm.get("PRCTR"));
			    item.put("KZBEW", mm.get("KZBEW")==null?"":mm.get("KZBEW"));
			    item.put("GRUND", mm.get("GRUND")==null?"":mm.get("GRUND"));
			    item.put("SAKTO", mm.get("SAKTO")==null?"":mm.get("SAKTO"));
			    /*
			     * ZLLORDER	自定义领料单号
			     * ZLLITEM	自定义领料单行号
			     * 309、310、261、262、411E、413、413E、Z61、Z62、Z63、Z64、541、201、202输入，其他传空
			     */
			    item.put("ZLLORDER", mm.get("ZLLORDER")==null?"":mm.get("ZLLORDER"));
			    item.put("ZLLITEM", mm.get("ZLLITEM")==null?"":mm.get("ZLLITEM"));
			    /*
			     * INSMK	库存类型
			     * 采购入库或工单入库时使用
					空：非限制使用
					2：质量检验
					3：已冻结
			     */
			    item.put("INSMK", mm.get("INSMK")==null?"":mm.get("INSMK"));
			    
			    /*
			     * VBELN_IM	交货单
			     * VBELP_IM	交货单项目
			     * 101， 跨工厂调拨时使用
			     */
			    item.put("VBELN_IM", mm.get("VBELN_IM")==null?"":mm.get("VBELN_IM"));
			    item.put("VBELP_IM", mm.get("VBELP_IM")==null?"":mm.get("VBELP_IM"));
			    /*
					ZRSV01	预留字段01
					ZRSV02	预留字段02
					ZRSV03	预留字段03
					ZRSV04	预留字段04
					ZRSV05	预留字段05
					ZRSV06	预留字段06
					ZRSV07	预留字段07
					ZRSV08	预留字段08
					ZRSV09	预留字段09
					ZRSV10	预留字段10
			     */
			    item.put("ZRSV01",mm.get("ZRSV01")==null?"":mm.get("ZRSV01"));
			    item.put("ZRSV02",mm.get("ZRSV02")==null?"":mm.get("ZRSV02"));
			    item.put("ZRSV03",mm.get("ZRSV03")==null?"":mm.get("ZRSV03"));
			    item.put("ZRSV04",mm.get("ZRSV04")==null?"":mm.get("ZRSV04"));
			    item.put("ZRSV05",mm.get("ZRSV05")==null?"":mm.get("ZRSV05"));
			    item.put("ZRSV06",mm.get("ZRSV06")==null?"":mm.get("ZRSV06"));
			    item.put("ZRSV07",mm.get("ZRSV07")==null?"":mm.get("ZRSV07"));
			    item.put("ZRSV08",mm.get("ZRSV08")==null?"":mm.get("ZRSV08"));
			    item.put("ZRSV09",mm.get("ZRSV09")==null?"":mm.get("ZRSV09"));
			    item.put("ZRSV10",mm.get("ZRSV10")==null?"":mm.get("ZRSV10"));
			    itemArray.add(item);

			}
			log.info("SendTOSAP >>>>"+sendData);
			return sendData.toJSONString();
		}catch (Exception e) {
			log.error("发给SAP的消息拼装异常:"+e.getMessage(),e);
			throw e;
		}
	}


	public static String sendHttpPost(String url, String interfaceID, String JSONBody) throws Exception {
		log.info("*************************************************" );
		log.info("*************************************************" );
		log.info("******************开始发送******************" );
		// 调用业务接口，需实时获取token
		authStr = getAccessToken(baseUrl);

		CloseableHttpClient httpClient = HttpClients.createDefault();
		HttpPost httpPost = new HttpPost(url);
		String messageId = CommonValidation.GetMessageID("SDK");
		httpPost.addHeader("msgId", messageId);
		//httpPost.addHeader("REQUSER", userName);  // 用户名
		httpPost.addHeader("Content-Type", "application/json");
		httpPost.addHeader("Authorization", "Bearer " + authStr);
		httpPost.setEntity(new StringEntity(JSONBody,"UTF-8"));
		CloseableHttpResponse response = httpClient.execute(httpPost);
		HttpEntity entity = response.getEntity();
		String responseContent = EntityUtils.toString(entity, "UTF-8");
		response.close();
		httpClient.close();
		log.info("Response:>>>>" + responseContent);
		log.info("******************发送结束******************" );
		log.info("*************************************************" );
		log.info("*************************************************" );
		return responseContent;
	}

	public static String getAccessToken(String requestUrl){

		String grantType = "client_credentials";
		String clientId = "BC_WMS";
		String clientSecret = "hkEU895glMWkZNvm0a_mFLZwHOhZ8CI-_JGbol44a7U";
		String scope = "";
		String clientAuth = "Send client credentials in body";

		String accessToken = "";
		try {
			String encodedCredentials = Base64.getEncoder().encodeToString((clientId + ":" + clientSecret).getBytes());
			URL url = new URL(requestUrl);
			HttpURLConnection connection = (HttpURLConnection) url.openConnection();

			connection.setRequestMethod("POST");
			connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
			connection.setRequestProperty("Authorization", "Basic " + encodedCredentials);
			connection.setDoOutput(true);

			String params = "grant_type=" + grantType +
					"&client_id=" + clientId +
					"&client_secret=" + clientSecret;
			try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()))) {
				writer.write(params);
			}

			int responseCode = connection.getResponseCode();
			if (responseCode == HttpURLConnection.HTTP_OK) {
				try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
					StringBuilder response = new StringBuilder();
					String line;
					while ((line = reader.readLine()) != null) {
						response.append(line);
					}

					// 解析JSON响应
					String jsonString = response.toString();
					JSONObject jsonObject = JSONObject.parseObject(jsonString);
					accessToken = jsonObject.getString("access_token");
					String tokenType = jsonObject.getString("token_type");
					long expiresIn = jsonObject.getLong("expires_in");

					System.out.println("Access Token: " + accessToken);
					System.out.println("Token Type: " + tokenType);
					System.out.println("Expires In: " + expiresIn);

				}
			} else {
				System.out.println("Failed to retrieve token. HTTP response code: " + responseCode);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return accessToken;
	}
}
