using SinochemCloudClient;
using SinochemCloudClient.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestSinochemCloudClient
{
    public class TestNormalCases
    {
        private static TrxCommunicationContext context = new TrxCommunicationContext();

        private const string UrlPrefix = "http://10.26.5.222:8008/1/CarFushion";

        private const string BalanceInquiryApi = "/queryMemberInfo";
        public static void TestBalanceInquiry()
        {
            CloudCommunicator<BalanceInquiryRequest, BalanceInquiryResponse> communicator =
                    new CloudCommunicator<BalanceInquiryRequest, BalanceInquiryResponse>(UrlPrefix + BalanceInquiryApi);
            BalanceInquiryRequest request = new BalanceInquiryRequest
            {
                dept_No = "123",
                card_No = "2009059500000166290",
                password = "111111"
            };

            Console.WriteLine("before send " + request.GetType().ToString());

            communicator.SendRequest(request);

            Console.WriteLine("got response messasge code" + communicator.Response.code);

            context.token = communicator.Response.result.token;

        }

        private const string PaymentApi = "/pay";
        public static void TestPayment()
        {
            CloudCommunicator<PaymentRequest, PaymentResponse> communicator =
                new CloudCommunicator<PaymentRequest, PaymentResponse>(UrlPrefix + PaymentApi);
            PaymentRequest request = new PaymentRequest
            {
                dept_No = "123",
                ttc = "12345",
                card_No = "2009059500000166290",
                password = "111111",
                code = "35",
                price = 5.66,
                lpm = 10,
                amount = 56.6,
                gas_Up_Time = DateTime.Now.ToString(),
                rear_Pump_Code = "",
                off_Line_Sign = "0",
                tradeDateTime = DateTime.Now.ToString(),
                mac = "1a2b3c",
                //token = context.token + CurrentTimeMillis().ToString()
                token = "AnM3B8LV255Ynyc" + DateTimeUtility.CurrentTimeMillis().ToString()
            };

            Console.WriteLine("before send " + request.GetType().ToString());

            communicator.SendRequest(request);

            Console.WriteLine("got response messasge code" + communicator.Response.code);

        }

        private const string TrxStatusInquiryApi = "/queryOrder";
        public static void TestTrxStatusInquiry()
        {
            CloudCommunicator<TrxStatusInquiryRequest, TrxStatusInquiryResponse> communicator =
                new CloudCommunicator<TrxStatusInquiryRequest, TrxStatusInquiryResponse>(UrlPrefix + PaymentApi);
            TrxStatusInquiryRequest request = new TrxStatusInquiryRequest
            {
                dept_No = "123",
                card_No = "2009059500000166290",
                pre_Amount = 56.6,
                ori_ttc = "12345",
                //token = context.token + CurrentTimeMillis().ToString()
                token = "AnM3B8LV255Ynyc" + DateTimeUtility.CurrentTimeMillis().ToString()
            };

            Console.WriteLine("before send " + request.GetType().ToString());

            communicator.SendRequest(request);

            Console.WriteLine("got response messasge code" + communicator.Response.code);

        }


        private const string RefundApi = "/cancelOrder";
        public static void TestRefund()
        {
            CloudCommunicator<RefundRequest, RefundResponse> communicator =
                new CloudCommunicator<RefundRequest, RefundResponse>(UrlPrefix + PaymentApi);
            RefundRequest request = new RefundRequest
            {
                dept_No = "123",
                card_No = "2009059500000166290",
                pre_Amount = 56.6,
                ori_ttc = "12345",
                //token = context.token + CurrentTimeMillis().ToString()
                token = "AnM3B8LV255Ynyc" + DateTimeUtility.CurrentTimeMillis().ToString()
            };

            Console.WriteLine("before send " + request.GetType().ToString());

            communicator.SendRequest(request);

            Console.WriteLine("got response messasge code" + communicator.Response.code);

        }
    }

    class TrxCommunicationContext
    {
        public string token { get; set; }
    }

    class DateTimeUtility
    {
        private static readonly DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
        public static long CurrentTimeMillis()
        {
            return (long)(DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
        }
    }
        
}