using BBWY.Common.Models;
using BBWY.Server.Business;
using BBWY.Server.Model.Dto;
using Jd.Api.Request;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using System;
using System.Collections.Generic;

namespace BBWY.Server.API.Controllers
{
    [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
    public class BatchPurchaseController : BaseApiController
    {
        private BatchPurchaseBusiness batchPurchaseBusiness;

        public BatchPurchaseController(IHttpContextAccessor httpContextAccessor, BatchPurchaseBusiness batchPurchaseBusiness) : base(httpContextAccessor)
        {
            this.batchPurchaseBusiness = batchPurchaseBusiness;
        }

        /// <summary>
        /// 获取包含采购方案的sku列表
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public IList<ProductSkuWithSchemeResponse> GetProductSkuAndSchemeList([FromBody] SearchProductSkuAndSchemeRequest request)
        {
            return batchPurchaseBusiness.GetProductSkuAndSchemeList(request);
        }

        /// <summary>
        /// 预览订单价格
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public PreviewOrderResponse PreviewOrder([FromBody] BatchPurchasePreviewOrderRequest request)
        {
            return batchPurchaseBusiness.PreviewOrder(request);
        }

        /// <summary>
        /// 批量创建采购单
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public BatchCreareOrderResponse BatchCreateOrder([FromBody] BatchPurchaseCreateOrderRequest request)
        {
            return batchPurchaseBusiness.BatchCreateOrder(request);
        }

        /// <summary>
        /// 预览订单价格V2
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public PreviewOrderResponse PreviewOrderV2([FromBody] BatchPurchasePreviewOrderRequestV2 request)
        {
            return batchPurchaseBusiness.PreviewOrderV2(request);
        }

        /// <summary>
        /// 批量创建采购单V2
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public BatchCreareOrderResponse BatchCreateOrderV2(BatchPurchaseCreateOrderRequestV2 request)
        {
            var userId = GetUserId();
            return batchPurchaseBusiness.BatchCreateOrderV2(request, userId);
        }

        /// <summary>
        /// 获取采购单列表
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public PurchaseOrderV2ListResponse GetPurchaseOrderList([FromBody] SearchPurchaseOrderV2Request request)
        {
            if (!httpContextAccessor.HttpContext.Request.Headers.TryGetValue("Authorization", out StringValues token))
                throw new BusinessException("未获取到token");
            return batchPurchaseBusiness.GetPurchaseOrderList(request, token);
        }

        /// <summary>
        /// 支付订单
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public void PayPurchaseOrder([FromBody] PayPurchaseOrderRequest request)
        {
             batchPurchaseBusiness.PayPurchaseOrder(request);
        }

        /// <summary>
        /// 取消订单
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public void CancelPurchaseOrder([FromBody] CancelPurchaseOrderRequest request)
        {
             batchPurchaseBusiness.CancelPurchaseOrder(request);
        }

        /// <summary>
        /// 修改采购单状态
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        [AllowAnonymous]
        public UpdatePackStateResponse UpdatePurchaseOrderState([FromBody] UpdatePurchaseOrderStateRequest request)
        {
            return batchPurchaseBusiness.UpdatePurchaseOrderState(request);
        }

        /// <summary>
        /// 修改打包状态
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public UpdatePackStateResponse UpdatePackState([FromBody] UpdatePackStateRequest request)
        {
            return batchPurchaseBusiness.UpdatePackState(request);
        }


    }
}