using Newtonsoft.Json;

using OnlineUserPool.Model;

using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace OnlineUserPool.Unility
{
    public class BaseApi
    {
        internal static System.Net.Http.HttpClient httpClient;
        static BaseApi()
        {
            httpClient = new System.Net.Http.HttpClient();
        }

        protected static async Task<T> PostAsync<T>(string url, object data)
        {
            StringContent stringContent;
            if (data != null)
            {
                stringContent = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");
            }
            else
            {
                stringContent = new StringContent("", Encoding.UTF8);
            }
            var response = await httpClient.PostAsync(ConfigHelp.Host + url, stringContent).ConfigureAwait(false);
            var result = await response.Content.ReadAsStringAsync();
            return JsonConvert.DeserializeObject<T>(result);
        }

        protected static async Task<T> GetAsync<T>(string url)
        {
            var response = await httpClient.GetAsync(ConfigHelp.Host + url, HttpCompletionOption.ResponseContentRead).ConfigureAwait(false);
            var result = await response.Content.ReadAsStringAsync();
            return JsonConvert.DeserializeObject<T>(result);
        }
    }
    public class WebService : BaseApi
    {
        /// <summary>
        /// 从服务端获取记录信息
        /// </summary>
        /// <returns></returns>
        public static List<MapRecordRanking> GetRecordFileFromServer(List<string> id)
        {
            return PostAsync<JsonResult<List<MapRecordRanking>>>("Map/GetCyclingRecordsById", id).ConfigureAwait(false).GetAwaiter().GetResult().data;
        }

        public static List<MapRouteAndUserQueryVM> GetMapRouteRandomUser(RandomRankingUserRequestVM requestVM)
        {
            return PostAsync<JsonResult<List<MapRouteAndUserQueryVM>>>($"Map/GetRandomRankingUserRecord", requestVM).ConfigureAwait(false).GetAwaiter().GetResult().data;
        }


    }
}
