using BBWY.Client.Models;
using BBWY.Client.Models.QiKu;
using BBWY.Common.Http;
using BBWY.Common.Models;
using System;
using System.Collections.Generic;
using System.Net.Http;

namespace BBWY.Client.APIServices
{
    public class BatchPurchaseService : BaseApiService, IDenpendency
    {
        public BatchPurchaseService(RestApiService restApiService, GlobalContext globalContext) : base(restApiService, globalContext)
        {
        }

        /// <summary>
        /// 获取包含对应平台采购方案的sku列表
        /// </summary>
        /// <param name="sku"></param>
        /// <param name="spu"></param>
        /// <returns></returns>
        public ApiResponse<IList<ProductSkuWithSchemeResponse>> GetProductSkuAndSchemeList(string sku, string spu)
        {
            return SendRequest<IList<ProductSkuWithSchemeResponse>>(globalContext.BBYWApiHost, "api/BatchPurchase/GetProductSkuAndSchemeList", new
            {
                globalContext.User.Shop.Platform,
                globalContext.User.Shop.AppKey,
                globalContext.User.Shop.AppSecret,
                globalContext.User.Shop.AppToken,
                globalContext.User.Shop.ShopId,
                sku,
                spu
            }, null, HttpMethod.Post);
        }

        public ApiResponse<PreviewOrderResponse> PreviewOrder(IList<ProductSkuWithScheme> productSkuWithSchemeList,
                                                              Consignee consignee,
                                                              PurchaseOrderMode purchaseOrderMode,
                                                              IList<PurchaseAccount> purchaseAccountList)
        {
            var productParamList = new List<object>();
            foreach (var productSkuWithScheme in productSkuWithSchemeList)
            {
                foreach (var purchaseSchemeProductSku in productSkuWithScheme.PurchaseSchemeProductSkuList)
                {
                    productParamList.Add(new
                    {
                        purchaseSchemeProductSku.PurchaseProductId,
                        purchaseSchemeProductSku.PurchaseSkuId,
                        PurchaseSpecId = purchaseSchemeProductSku.PurchaseSkuSpecId,
                        Quantity = purchaseSchemeProductSku.ItemTotal,
                        productSkuWithScheme.PurchaserId,
                        productSkuWithScheme.PurchaserName,
                        productSkuWithScheme.PurchasePlatform,
                        BelongSkuId = productSkuWithScheme.SkuId
                    });
                }
            }

            return SendRequest<PreviewOrderResponse>(globalContext.BBYWApiHost, "api/BatchPurchase/PreviewOrder", new
            {
                consignee,
                purchaseOrderMode,
                purchaseAccountList,
                productParamList
            }, null, HttpMethod.Post);
        }

        public ApiResponse<BatchCreareOrderResponse> CreateOrder(IList<ProductSkuWithScheme> productSkuWithSchemeList,
                                                                 Consignee consignee,
                                                                 PurchaseOrderMode purchaseOrderMode,
                                                                 IList<PurchaseAccount> purchaseAccountList,
                                                                 string extensions,
                                                                 string remark,
                                                                 IList<PackSkuConfig> packSkuConfigList)
        {
            var productParamList = new List<object>();
            foreach (var productSkuWithScheme in productSkuWithSchemeList)
            {
                foreach (var purchaseSchemeProductSku in productSkuWithScheme.PurchaseSchemeProductSkuList)
                {
                    productParamList.Add(new
                    {
                        purchaseSchemeProductSku.PurchaseProductId,
                        purchaseSchemeProductSku.PurchaseSkuId,
                        PurchaseSpecId = purchaseSchemeProductSku.PurchaseSkuSpecId,
                        Quantity = purchaseSchemeProductSku.ItemTotal,
                        productSkuWithScheme.PurchaserId,
                        productSkuWithScheme.PurchaserName,
                        productSkuWithScheme.PurchasePlatform,
                        BelongSkuId = productSkuWithScheme.SkuId,
                        BelongProductId = productSkuWithScheme.ProductId,
                        BelongPrice = productSkuWithScheme.Price,
                        BelongSkuTitle = productSkuWithScheme.Title,
                        BelongLogo = productSkuWithScheme.Logo,
                        BelongQuantity = productSkuWithScheme.Quantity,
                        BelongPurchaseSchemeId = productSkuWithScheme.PurchaseSchemeId
                    });
                }
            }
            string autoPay = "fail";
            return SendRequest<BatchCreareOrderResponse>(globalContext.BBYWApiHost, "api/BatchPurchase/BatchCreateOrder", new
            {
                consignee,
                purchaseOrderMode,
                purchaseAccountList,
                productParamList,
                extensions,
                remark,
                autoPay,
                globalContext.User.Shop.ShopId,
                globalContext.User.Shop.ShopName,
                packSkuConfigList
            }, null, HttpMethod.Post);
        }

        public ApiResponse<PurchaseOrderV2ListResponse> GetPurchaseOrderList(string spu,
                                                                         string sku,
                                                                         string purchaserName,
                                                                         string purchaseOrderId,
                                                                         int pageIndex,
                                                                         int pageSize,
                                                                         DateTime startDate,
                                                                         DateTime endDate,
                                                                         PurchaseOrderState? purchaseOrderState)
        {
            return SendRequest<PurchaseOrderV2ListResponse>(globalContext.BBYWApiHost, "api/BatchPurchase/GetPurchaseOrderList", new
            {
                sku,
                spu,
                purchaseOrderId,
                globalContext.User.Shop.ShopId,
                purchaserName,
                purchaseOrderState,
                pageIndex,
                pageSize,
                startDate,
                endDate
            }, null, HttpMethod.Post);
        }


        public ApiResponse<PayPurchaseOrderResponse> PayOrder(string orderId, Platform PurchasePlatform, PurchaseAccount purchaseAccount)
        {
            return SendRequest<PayPurchaseOrderResponse>(globalContext.BBYWApiHost, "api/BatchPurchase/PayPurchaseOrder", new
            {
                orderId,
                Platform = purchaseAccount.PurchasePlatformId,
                purchaseAccount.AppKey,
                purchaseAccount.AppSecret,
                purchaseAccount.AppToken,
            }, null, HttpMethod.Post);
        }

        public ApiResponse<PayPurchaseOrderResponse> CancelOrder(string orderId, PurchaseAccount purchaseAccount, string remark="")
        {
            return SendRequest<PayPurchaseOrderResponse>(globalContext.BBYWApiHost, "api/BatchPurchase/CancelPurchaseOrder", new
            {
               
                orderId,
                Platform = purchaseAccount.PurchasePlatformId,
                purchaseAccount.AppKey,
                purchaseAccount.AppSecret,
                purchaseAccount.AppToken,
                remark,
            }, null, HttpMethod.Post);
        }

        /// <summary>
        /// 修改打包状态
        /// </summary>
        /// <param name="orderId"></param>
        /// <param name="PackState"></param>
        /// <returns></returns>
        public ApiResponse<PayPurchaseOrderResponse> UpdatePackState(string orderId, PackState packState)
        {
            return SendRequest<PayPurchaseOrderResponse>(globalContext.BBYWApiHost, "api/BatchPurchase/UpdatePackState", new
            {
                orderId,
                packState
            }, null, HttpMethod.Post);
        }

        /// <summary>
        /// 修改采购单状态
        /// </summary>
        /// <param name="orderId"></param>
        /// <param name="PackState"></param>
        /// <returns></returns>
        public ApiResponse<PayPurchaseOrderResponse> UpdatePurchaseOrderState(string orderId, PurchaseOrderState PurchaseOrderState)
        {
            return SendRequest<PayPurchaseOrderResponse>(globalContext.BBYWApiHost, "api/BatchPurchase/UpdatePurchaseOrderState", new
            {
                orderId,
                PurchaseOrderState
            }, null, HttpMethod.Post);
        }



    }
}