package cn.com.taiji.dataService.utils;

import cn.com.digitalhainan.apione.sdk.*;
import cn.com.digitalhainan.apione.utils.LogUtils;
import cn.com.digitalhainan.apione.utils.ObjectUtils;
import okhttp3.*;
import okhttp3.internal.http.HttpMethod;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.TreeMap;

/**
 * 接口调用工具类
 * @author chen mh
 * @date 2023/8/14 9:52
 */
public class ApioneUtils {

    /**
     * 接口请求
     *
     * @param contentJson 接口请求 Body 入参
     * @param ak 我的应用-我申请的功能-对应功能查看 ak
     * @param sk 我的应用-我申请的功能-对应功能查看 sk
     * @param apiName 接口 api name
     * @param region 接口请求区域 INTRA(政务外网),INTER(政务互联网)
     * @param requestUrl 接口请求地址
     * @param mediaType 请求正文格式 默认 application/json
     * @param path 接口路径参数，按该格式拼接："/path1/path2"
     * @param headerParamsMap 接口 Header 参数，Key-Value 数据格式
     * @param queryParamsMap 接口 Query 参数，Key-Value 数据格式
     * @return 接口返回数据
     */
    public static String call(String contentJson,
                              String ak,
                              String sk,
                              String apiName,
                              String region,
                              String requestUrl,
                              String mediaType,
                              String path,
                              Map<String, String> headerParamsMap,
                              Map<String, String> queryParamsMap) {

        ContentBody contentBody = new ContentBody(contentJson);
        HttpParameters parameters = HttpParameters.builder()
                .api(apiName)
                .region(region)
                .headerParamsMap(headerParamsMap)
                .queryParamsMap(queryParamsMap)
                .path(path)
                .mediaType(MediaType.parse(mediaType))
                .accessKey(ak)
                .secretKey(sk)
                .contentBody(contentBody)
                .requestUrl(requestUrl)
                .build();
        //请求开发服务，获取 response
        HttpReturn call = HttpCaller.getInstance().call(parameters);
        // 如需获取二进制响应使用下方这个
        // HttpByteReturn call = HttpCaller.getInstance().callByte(parameters);
        return call.getResponse();
    }

    public static InputStream callByte(String contentJson,
                                       String ak,
                                       String sk,
                                       String apiName,
                                       String region,
                                       String requestUrl,
                                       String mediaType,
                                       String path,
                                       Map<String, String> headerParamsMap,
                                       Map<String, String> queryParamsMap) {

        ContentBody contentBody = new ContentBody(contentJson);
        HttpParameters parameters = HttpParameters.builder()
                .api(apiName)
                .region(region)
                .headerParamsMap(headerParamsMap)
                .queryParamsMap(queryParamsMap)
                .path(path)
                .mediaType(MediaType.parse(mediaType))
                .accessKey(ak)
                .secretKey(sk)
                .contentBody(contentBody)
                .requestUrl(requestUrl)
                .build();
        //请求开发服务，获取 response

        HttpByteReturn call = MyHttpCaller.getInstance().callByte(parameters);
        // 如需获取二进制响应使用下方这个
        //HttpByteReturn call = HttpCaller.getInstance().callByte(parameters);
        return call.getResponse();
    }


}
