package com.community.commom.hk.test;

import com.alibaba.fastjson.JSON;
import com.community.commom.hk.Digests;
import com.community.commom.hk.HttpClientSSLUtils;

import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;


/**
 * openapi 测试DEMO
 * 客户开发的时候可以参考此代码编写自己的应用
 * 也可以使用demo中的jar包，不过jar包使用务必使用全套，
 * 万不可只取其中一部分，避免依赖破坏
 * @author shengyiling
 *
 */
class OpenapiTest {
	
	/**
	 * APPKEY需要到部署的平台服务器上生成。
	 * <p>
	 * 调用Openpai的操作码，需要去平台上生成，详见《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中[获取AppKey和Secret]章节说明
	 * </p>
	 * <p>
	 * 《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》 该文档请找技术支持或者交付的同事提供
	 * </p>
	 */
	private static final String APPKEY = "b4434b13";
	
	/**
	 * SECRET需要到部署的平台服务器上生成。
	 * <p>
	 * 调用Openpai的操作码，需要去平台上生成，详见《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中[获取AppKey和Secret]章节说明
	 * </p>
	 * <p>
	 * 《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》 该文档请找技术支持或者交付的同事提供
	 * </p>
	 */
	private static final String SECRET = "64a1f32d53784ce2a34bd81822db1b91";
	
	
	/**
	 * http请求地址
	 * <p>openapi的地址,默认情况下openapi的IP端口与基础应用的IP端口是一致的</p>
	 * <p>请将地址配置正确.</p>
	 * <p>默认情况下是127.0.0.1:80 ，如果地址不通请根据实际情况修改IP端口</p>
 	 */
	private static final String OPENAPI_IP_PORT_HTTP = "http://192.168.0.122";
	
	/**
	 * https请求地址
	 * <p>openapi的地址,默认情况下openapi的IP端口与基础应用的IP端口是一致的</p>
	 * <p>请将地址配置正确.</p>
	 * <p>默认情况下是127.0.0.1:443 ，如果地址不通请根据实际情况修改IP端口</p>
 	 */
	private static final String OPENAPI_IP_PORT_HTTPS = "https://127.0.0.1:443";
	
	/**
	 * 获取默认用户UUID的接口地址，此地址可以从《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中具体的接口说明上获取
	 */
	private static final String ITF_ADDRESS_GET_DEFAULT_USER_UUID = "/openapi/service/base/user/getDefaultUserUuid";
	
	/**
	 * 分页获取监控点信息的接口地址，此地址可以从《海康威视iVMS-8700平台SDKV2.*.* HTTP-OpenAPI使用说明书.chm》中具体的接口说明上获取
	 */
	private static final String ITF_ADDRESS_GET_CAMERAS = "/openapi/service/vss/res/getCameras";
	
	/**
	 * <p>操作用户UUID，即用户UUID，首次使用操作用户UUID可以通过接口 [获取默认用户UUID]来获取</p>
	 * <p>也可以通过接口[分页获取用户]来获取</p>
	 */
//	private static final String OP_USER_UUID = "0be83d40695011e7981e0f190ed6d2e7";
	private static final String OP_USER_UUID = "5b2eb534696b11e89c2e438f92627767";
	
	/**
	 * 测试方法
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {

		/***http方式调用***/
		//System.out.println(testGetDefaultUserUUID());
		//System.out.println(testGetCameras());
//		
//		/***https方式调用***/
//		System.out.println(testGetDefaultUserUUID_Https());
//		System.out.println(testGetCameras_Https());

		LocalDate today = LocalDate.now();
		int year = today.getYear();
		// 加上20, 表示加上20年,默认

		int month = today.getMonthValue();
		int day = today.getDayOfMonth();

	}
	
	/**
	 * HTTP方式
	 * 获取默认用户UUID 测试
	 * @return
	 * @throws Exception
	 */
	private static String testGetDefaultUserUUID() throws Exception{
		String url = OPENAPI_IP_PORT_HTTP + ITF_ADDRESS_GET_DEFAULT_USER_UUID;
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("appkey", APPKEY);//设置APPKEY
		map.put("time", System.currentTimeMillis());//设置时间参数
		String params =  JSON.toJSONString(map);
		System.out.println(" ====== testGetDefaultUserUUID 请求参数：【" + params + "】");
		String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, params, SECRET), params);
		System.out.println(" ====== testGetDefaultUserUUID 请求返回结果：【{" + data + "}】");
		
		return data;
	}
	
	/** 
	 * HTTP方式
	 * 分页获取监控点信息 测试
	 * @return
	 * @throws Exception
	 */
	private static String testGetCameras() throws Exception{
		 String url = OPENAPI_IP_PORT_HTTP + ITF_ADDRESS_GET_CAMERAS;
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("appkey", APPKEY);//设置APPKEY
        map.put("time", System.currentTimeMillis());//设置时间参数
        map.put("pageNo", 1);//设置分页参数
        map.put("pageSize", 5);//设置分页参数
        map.put("opUserUuid", OP_USER_UUID);//设置操作用户UUID
        String params = JSON.toJSONString(map);
        System.out.println(" ====== getCameras请求参数：【" + params + "】");
        String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
        System.out.println(" ====== getCameras请求返回结果：【{" + data + "}】");
        
        return data;
	}
	
	/**
	 * HTTPS方式
	 * 获取默认用户UUID 测试
	 * @return
	 * @throws Exception
	 */
	private static String testGetDefaultUserUUID_Https() throws Exception{
		String url = OPENAPI_IP_PORT_HTTPS + ITF_ADDRESS_GET_DEFAULT_USER_UUID;
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("appkey", APPKEY);//设置APPKEY
		map.put("time", System.currentTimeMillis());//设置时间参数
		String params =  JSON.toJSONString(map);
		System.out.println("============" + params + "============");
		String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
		System.out.println("============" + data + "============");
		
		return data;
	}
	
	/**
	 * HTTPS方式
	 * 分页获取监控点信息 测试
	 * @return
	 * @throws Exception
	 */
	private static String testGetCameras_Https() throws Exception{
		 String url = OPENAPI_IP_PORT_HTTPS + ITF_ADDRESS_GET_CAMERAS;
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("appkey", APPKEY);//设置APPKEY
        map.put("time", System.currentTimeMillis());//设置时间参数
        map.put("pageNo", 1);//设置分页参数
        map.put("pageSize", 5);//设置分页参数
        map.put("opUserUuid", OP_USER_UUID);//设置操作用户UUID
        String params = JSON.toJSONString(map);
        System.out.println(" ====== getCameras请求参数：【" + params + "】");
        String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
        System.out.println(" ====== getCameras请求返回结果：【{" + data + "}】");
        
        return data;
	}



	/**
	 * HTTPS方式
	 * 分页获取监控点信息 测试
	 * @return
	 * @throws Exception
	 */
	private static String testGetDoorEventsHistory() throws Exception{
		String url = OPENAPI_IP_PORT_HTTPS + "/openapi/service/acs/event/getDoorEventsHistory";
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("appkey", APPKEY);//设置APPKEY
		map.put("time", System.currentTimeMillis());//设置时间参数
		map.put("pageNo", 1);//设置分页参数
		map.put("pageSize", 5);//设置分页参数
		map.put("opUserUuid", OP_USER_UUID);//设置操作用户UUID
		String params = JSON.toJSONString(map);
		System.out.println(" ====== getCameras请求参数：【" + params + "】");
		String data = HttpClientSSLUtils.doPost(url + "?token=" + Digests.buildToken(url + "?" + params, null, SECRET), params);
		System.out.println(" ====== getCameras请求返回结果：【{" + data + "}】");

		return data;
	}



}
