using LifePayment.Domain.Shared;
using System.Threading.Tasks;

namespace LifePayment.Domain
{
    public class WxPayApi : WxClient, IWxPayApi
    {
        public async Task<PayTransactionsNativeReponse> PayTransactionsNative(PayTransactionsNativeInput input)
        {
            var result = await PostAsync<PayTransactionsNativeInput, PayTransactionsNativeReponse>(input, LifePaymentConstant.PayTransactionsNative);
            return result;
        }

        public async Task<PayTransactionsReponse> PayTransactions(PayTransactionsInput input)
        {
            var result = await GetAsync<PayTransactionsInput, PayTransactionsReponse>(input, LifePaymentConstant.PayTransactions);
            return result;
        }

        public async Task<PayTransactionsH5Reponse> PayTransactionsH5(PayTransactionsNativeH5 input)
        {
            var result = await PostAsync<PayTransactionsNativeH5, PayTransactionsH5Reponse>(input, LifePaymentConstant.PayTransactionsH5);
            return result;
        }

        public async Task<ModelPayPrePayId> PayTransactionsJsAPI(ModelMiniPayRequest input)
        {
            var result = await PostAsync<ModelMiniPayRequest, ModelPayPrePayId>(input, LifePaymentConstant.PayJsApi);
            return result;
        }

        public async Task<WxPayDomesticRefundsReponse> WxPayDomesticRefunds(WxPayDomesticRefundsRequest input)
        {
            var result = await NomalPostAsync<WxPayDomesticRefundsRequest, WxPayDomesticRefundsReponse>(input, LifePaymentConstant.WxPayDomesticRefunds);
            return result;
        }

        public async Task<WxPayTradeBillApplyReponse> WxPayTradeBillApply(WxPayTradeBillApplyRequest input)
        {
            var result = await NomalPostAsync<WxPayTradeBillApplyRequest, WxPayTradeBillApplyReponse>(input, LifePaymentConstant.WxPayTradeBillApply);
            return result;
        }

        public async Task<WxPayTradeBillQueryReponse> WxPayTradeBillQuery(WxPayTradeBillQueryRequest input)
        {
            var result = await NomalPostAsync<WxPayTradeBillQueryRequest, WxPayTradeBillQueryReponse>(input, LifePaymentConstant.WxPayTradeBillQuery);
            return result;
        }
    }
}