using Amazon.Runtime;
using langguanApi.Extensions.AutoDI;
namespace langguanApi.Common.Proxy
{
    /// 
    /// http
    /// 
    [ServiceInjection(InjectionType.Singleton)]
    public class HttpProxy
    {
        private readonly IHttpClientFactory _httpClientFactory;
        public HttpProxy(IHttpClientFactory httpClientFactory)
        {
            _httpClientFactory = httpClientFactory;
        }
        /// 
        /// 获取数据
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public async Task Get(Dictionary parameters, string requestUri)
        {
            //从工厂获取请求对象
            var client = _httpClientFactory.CreateClient();
            if (parameters != null)
            {
                var strParam = string.Join("&", parameters.Select(o => o.Key + "=" + o.Value));
                requestUri = string.Concat(requestUri, '?', strParam);
            }
            client.BaseAddress = new Uri(requestUri);
            var resp = await client.GetAsync(requestUri);
            if (resp.IsSuccessStatusCode)
            {
                var content = await resp.Content.ReadAsStringAsync();
                return Newtonsoft.Json.JsonConvert.DeserializeObject(content);
            }
            else
            {
                Console.WriteLine($"请求失败,状态码:{resp.StatusCode},请求地址 {requestUri}");
                return default(T);
            }
        }
        /// 
        /// post数据
        /// 
        /// 
        /// 
        /// 
        public async Task PostData(object data, string requestUri)
        {
            StringContent content = null;
            var client = _httpClientFactory.CreateClient();
            client.BaseAddress = new Uri(requestUri);
            if (data != null)
            {
                string json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
                content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
            }
            var response = await client.PostAsync(requestUri, content);
            if (response.IsSuccessStatusCode)
            {
                var result = await response.Content.ReadAsStringAsync();
                return Newtonsoft.Json.JsonConvert.DeserializeObject(result);
            }
            else
            {
                Console.WriteLine($"请求失败,状态码:{response.StatusCode},请求地址 {requestUri}");
                return default(T);
            }
        }
    }
}