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

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

        }

        public ApiResponse<object> AddPurchaseOrder(PurchaseOrder purchaseOrder)
        {
            return SendRequest<object>(globalContext.BBYWApiHost,
                                       "api/PurchaseOrder/AddPurchaseOrder",
                                       purchaseOrder,
                                       null,
                                       HttpMethod.Post);
        }

        public ApiResponse<object> EditPurchaseOrder(PurchaseOrder purchaseOrder)
        {
            return SendRequest<object>(globalContext.BBYWApiHost,
                                    "api/PurchaseOrder/EditPurchaseOrder",
                                    purchaseOrder,
                                    null,
                                    HttpMethod.Put);
        }

        public ApiResponse<IList<PurchaseOrderResponse>> GetList(IList<string> skuIdList, StorageType storageType, long shopId)
        {
            return SendRequest<IList<PurchaseOrderResponse>>(globalContext.BBYWApiHost,
                                                            "api/PurchaseOrder/GetList",
                                                            new { SkuIdList = skuIdList, StorageType = storageType, ShopId = shopId },
                                                            null,
                                                            HttpMethod.Post);
        }

        public ApiResponse<object> DeletePurchaseOrder(long id)
        {
            return SendRequest<object>(globalContext.BBYWApiHost,
                                       $"api/purchaseOrder/deletePurchaseOrder/{id}",
                                       null,
                                       null,
                                       HttpMethod.Delete);
        }

        /// <summary>
        /// 预览订单
        /// </summary>
        /// <param name="consignee"></param>
        /// <param name="purchaseSchemeProductSkuList"></param>
        /// <returns></returns>
        public ApiResponse<PreviewOrderResponse> PreviewPurchaseOrder(Consignee consignee, List<CargoParam> cargoParamList, Platform purchasePlatform, PurchaseAccount purchaseAccount, PurchaseOrderMode purchaseOrderMode)
        {
            return SendRequest<PreviewOrderResponse>(globalContext.BBYWApiHost, "api/purchaseOrder/PreviewPurchaseOrder", new
            {
                purchaseOrderMode,
                consignee,
                CargoParamList = cargoParamList,
                Platform = purchasePlatform,
                AppKey = purchaseAccount.AppKey,
                AppSecret = purchaseAccount.AppSecret,
                AppToken = purchaseAccount.AppToken,
                SaveResponseLog = true
            }, null, HttpMethod.Post);
        }

        /// <summary>
        /// 创建采购单
        /// </summary>
        /// <param name="consignee"></param>
        /// <param name="purchaseSchemeProductSkuList"></param>
        /// <param name="purchasePlatform"></param>
        /// <param name="purchaseAccount"></param>
        /// <param name="purchaseOrderMode"></param>
        /// <param name="tradeMode"></param>
        /// <param name="remark"></param>
        /// <param name="orderId"></param>
        /// <param name="shopId"></param>
        /// <param name="purchaseAccountId"></param>
        /// <param name="buyerAccount"></param>
        /// <param name="sellerAccount"></param>
        /// <param name="purchaserId"></param>
        /// <param name="platformCommissionRatio"></param>
        /// <param name="extensions"></param>
        /// <returns></returns>
        public ApiResponse<object> FastCreateOrder(Consignee consignee,
                                                   List<CargoParam> cargoParamList,
                                                   Platform purchasePlatform,
                                                   PurchaseAccount purchaseAccount,
                                                   PurchaseOrderMode purchaseOrderMode,
                                                   string tradeMode,
                                                   string remark,
                                                   string orderId,
                                                   long shopId,
                                                   long purchaseAccountId,
                                                   string buyerAccount,
                                                   string sellerAccount,
                                                   string purchaserId,
                                                   decimal platformCommissionRatio,
                                                   string extensions)
        {
            return SendRequest<object>(globalContext.BBYWApiHost, "api/purchaseOrder/NewFastCreateOrder", new
            {
                purchaseOrderMode,
                consignee,
                CargoParamList = cargoParamList,
                Platform = purchasePlatform,
                purchaseAccount.AppKey,
                purchaseAccount.AppSecret,
                purchaseAccount.AppToken,
                SaveResponseLog = true,
                tradeMode,
                remark,
                orderId,
                shopId,
                purchaseAccountId,
                buyerAccount,
                sellerAccount,
                purchaserId,
                platformCommissionRatio,
                extensions
            }, null, HttpMethod.Post);
        }



        /// <summary>
        /// 查询审核采购单
        /// </summary>
        /// <param name="shopIdList"></param>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        /// <returns></returns>
        public ApiResponse<IList<AuditPurchaseOrderResponse>> GetAuditPurchaseOrderList(IList<long> shopIdList, DateTime startDate, DateTime endDate)
        {
            return SendRequest<IList<AuditPurchaseOrderResponse>>(globalContext.BBYWApiHost, "Api/PurchaseOrder/GetAuditPurchaseOrderList", new
            {
                startDate,
                endDate,
                shopIdList
            }, null, HttpMethod.Post);
        }
    }
}