using Model;
using Newtonsoft.Json;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;

namespace BLL
{
    public static class ServerService
    {
        public static Model.TokenItem GetCNCECToken()
        {
            string CNCECPath = SysConstSetService.CNCECPath;

            string baseurl = CNCECPath + "/api/Common/GetToken";
            var client = new RestClient(baseurl);
            client.Timeout = -1;
            var request = new RestRequest(Method.POST);
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            var thisUnit = CommonService.GetIsThisUnit();
            request.AddParameter("UnitName", thisUnit.UnitName);
            request.AddParameter("CollCropCode", thisUnit.CollCropCode);
            //request.AddJsonBody(JsonBody);
            IRestResponse response = client.Execute(request);
            Console.WriteLine(response.Content);
            var responeData = JsonConvert.DeserializeObject<Model.ResponeData>(response.Content.ToString());
            TokenItem tokenItem = new TokenItem();
            if (responeData.code == 1 && string.IsNullOrEmpty(responeData.message))
            {
                var token = JsonConvert.DeserializeObject<Model.TokenItem>(responeData.data.ToString());
                tokenItem.Token = token.Token.ToString();
                tokenItem.ExpiryTime = token.ExpiryTime.ToString();
                SysConstSetService.SetToken(tokenItem.Token);
                SysConstSetService.SetTokenExpirationTime(tokenItem.ExpiryTime);
            }
            return tokenItem;

        }
        public static Model.ReturnData PushCNCEC(string JsonBody, string apiurl)
        {
            Model.ReturnData responeData = new Model.ReturnData();
            string CNCECPath = SysConstSetService.CNCECPath;
            if (string.IsNullOrEmpty(CNCECPath))
            {
                responeData.code = 0;
                responeData.message = "接口地址为空,请配置!";
                return responeData;

            }
            string baseurl = CNCECPath + apiurl;
            var client = new RestClient(baseurl);
            client.Timeout = -1;
            var request = new RestRequest(Method.POST);
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            var tokenItem = GetToken();
            request.AddHeader("token", tokenItem.Token);
            request.AddJsonBody(JsonBody);
            IRestResponse response = client.Execute(request);
            APICommonService.SaveSysHttpLog("api_Out", baseurl, response.Content);
            var returnData = JsonConvert.DeserializeObject<Model.ResponeData>(response.Content.ToString());
            if (returnData.code == 0)
            {
                responeData.code = 0;
                responeData.message = returnData.message;
                return responeData;

            }
            return responeData;
        }
        public static Model.TokenItem GetToken()
        {
            Model.TokenItem tokenItem = new Model.TokenItem();
            tokenItem.Token = BLL.SysConstSetService.CNCECToken;
            tokenItem.ExpiryTime = BLL.SysConstSetService.CNCECTTokenExTime;
            if (string.IsNullOrEmpty(tokenItem.Token) || string.IsNullOrEmpty(tokenItem.ExpiryTime))
            {
                //DateTime.Parse(SysConstSetService.CNCECTTokenExTime).AddMinutes(-10) > DateTime.Now
                tokenItem = GetCNCECToken();
            }
            else if (DateTime.Parse(SysConstSetService.CNCECTTokenExTime).AddMinutes(-10) < DateTime.Now)
            {
                tokenItem = GetCNCECToken();

            }
            return tokenItem;
        }

    }
}