using BBWYB.Common.Http;
using Newtonsoft.Json;
using QuanTan.SDK.Extensions;
using QuanTan.SDK.Model;

namespace QuanTan.SDK.Client
{
    public class BaseClient
    {
        protected RestApiService restApiService;

        protected readonly string host = "https://qt.qiyue666.com/";

        public BaseClient(RestApiService restApiService)
        {
            this.restApiService = restApiService;
        }

        public QuanTanResponse<T> SendRequest<T>(string apiPath, object param, string appId, string appSecret)
        {
            var callTime = DateTime.Now.ToString("yyyyMMddHHmmss");
            var randomNum = new Random(Guid.NewGuid().GetHashCode()).Next(100000, 999999).ToString();
            if (param == null)
                param = new object[] { };

            var paramStr = JsonConvert.SerializeObject(param);

            var jmStr = JsonConvert.SerializeObject(new QuanTanSignParam()
            {
                appId = appId,
                appSecret = appSecret,
                callTime = callTime,
                _params = paramStr,
                randomNum = randomNum
            });
            var md5Str = jmStr.Md5Encrypt();
            var qtToken = $"{appId}-{callTime}-{md5Str}-{randomNum}";
            var requestParam = new QuanTanRequestParam()
            {
                Params = paramStr,
                token = qtToken
            };

            try
            {
                var restApiResult = restApiService.SendRequest(host, apiPath, requestParam, null, HttpMethod.Post);
                if (restApiResult.StatusCode != System.Net.HttpStatusCode.OK)
                    throw new Exception(restApiResult.Content);
                return JsonConvert.DeserializeObject<QuanTanResponse<T>>(restApiResult.Content);
            }
            catch (Exception ex)
            {
                return new QuanTanResponse<T>() { Status = 0, Message = ex.Message };
            }
        }
    }
}