using BBWYB.Server.Business;
using BBWYB.Server.Model.Dto;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using SDKAdapter.OperationPlatform.Models;

namespace BBWYB.Server.API.Controllers
{
    [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
    public class OrderController : BaseApiController
    {
        private OrderBusiness orderBusiness;
        public OrderController(IHttpContextAccessor httpContextAccessor, OrderBusiness orderBusiness) : base(httpContextAccessor)
        {
            this.orderBusiness = orderBusiness;
        }

        /// <summary>
        /// 订单查询
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public OrderListResponse GetOrderList([FromBody] QueryOrderRequest request)
        {
            return orderBusiness.GetOrderList(request);
        }

        /// <summary>
        /// 获取快递单列表
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public IList<PurchaseExpressOrderResponse> GetPurchaseExpressOrderList([FromBody] QueryExpressOrderRequest request)
        {
            return orderBusiness.GetPurchaseExpressOrderList(request);
        }

        /// <summary>
        /// 批量查询快递单列表
        /// </summary>
        /// <param name="orderIds">订单Id数组</param>
        /// <returns></returns>
        [HttpPost]
        public IList<PurchaseExpressOrderResponse> BatchGetPurchaseExpressOrderList([FromBody] IList<string> orderIds)
        {
            return orderBusiness.GetPurchaseExpressOrderList(orderIds);
        }


        ///// <summary>
        ///// 出库
        ///// </summary>
        ///// <param name="request"></param>
        //[HttpPost]
        //public void OutStock([FromBody] OutStockRequest request)
        //{
        //    orderBusiness.OutStock(request);
        //}

        /// <summary>
        /// 取消订单
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void CancelOrder([FromBody] CancelOrderRequest request)
        {
            var token = GetToken();
            orderBusiness.CancelOrder(request, token);
        }

        /// <summary>
        /// 改价
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void EditPrice([FromBody] OP_EditPriceRequest request)
        {
            orderBusiness.EditPrice(request);
        }

        /// <summary>
        /// 修改商家备注
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void EditVenderRemark([FromBody] EditVenderRemarkRequest request)
        {
            orderBusiness.EditVenderRemark(request);
        }

        /// <summary>
        /// 修改订单SKU备注
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void EditOrderSkuRemark([FromBody] EditOrderSkuRemarkRequest request)
        {
            orderBusiness.EditOrderSkuRemark(request);
        }

        /// <summary>
        /// 来源SKU验收
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void CheckSku([FromBody] CheckSkuRequest request)
        {
            orderBusiness.CheckSku(request);
        }

        /// <summary>
        /// 核算订单
        /// </summary>
        /// <param name="orderId"></param>
        [HttpPost("{orderId}")]
        public void CheckComputationOrder([FromRoute] string orderId)
        {
            orderBusiness.CheckComputationOrder(orderId);
        }

        /// <summary>
        /// 齐库推送打包费
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void QiKuPublishPackAmount([FromBody] QiKuPublishPackAmountRequest request)
        {
            orderBusiness.QiKuPublishPackAmount(request);
        }

        /// <summary>
        /// 统计各状态订单数量
        /// </summary>
        /// <param name="shopId"></param>
        /// <returns></returns>
        [HttpPost("{shopId}")]
        public OrderCountByStateResponse StatisticsOrderCountByOrderState([FromRoute] long shopId)
        {
            return orderBusiness.StatisticsOrderCountByOrderState(shopId);
        }

        /// <summary>
        /// 齐库推送sku配置状态
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        [AllowAnonymous]
        public void QikuPublishOrderSkuPackConfigState([FromBody] QikuPublishOrderSkuPackConfigStateRequest request)
        {
            orderBusiness.QikuPublishOrderSkuPackConfigState(request);
        }

        /// <summary>
        /// 设置/取消特殊单
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void SetSpecialOrder([FromBody] SetSpecialOrderRequest request)
        {
            orderBusiness.SetSpecialOrder(request);
        }
    }
}