using BBWY.Server.Business;
using BBWY.Server.Model.Dto;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;

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

        /// <summary>
        /// 获取订单列表
        /// </summary>
        /// <param name="searchOrderRequest"></param>
        /// <returns></returns>
        [HttpPost]
        public OrderListResponse GetOrderList([FromBody] SearchOrderRequest searchOrderRequest)
        {
            return orderBusiness.GetOrderList(searchOrderRequest);
        }

        /// <summary>
        /// 订单导出
        /// </summary>
        /// <param name="searchOrderRequest"></param>
        /// <returns></returns>
        [HttpPost]
        public IList<ExportOrderResponse> ExportOrderList([FromBody] SearchOrderRequest searchOrderRequest)
        {
            return orderBusiness.ExportOrderList(searchOrderRequest);
        }

        /// <summary>
        /// 获取单个订单详情
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        [HttpGet("{orderId}")]
        public OrderResponse GetOrderById([FromRoute] string orderId)
        {
            return orderBusiness.GetOrderById(orderId);
        }

        /// <summary>
        /// 根据订单Id获取归属店铺
        /// </summary>
        /// <param name="orderIdList"></param>
        /// <returns></returns>
        [HttpPost]
        public IList<OrderBelongShopResponse> GetOrderBelongShop([FromBody] IList<string> orderIdList)
        {
            return orderBusiness.GetOrderBelongShop(orderIdList);
        }

        /// <summary>
        /// 解密收货人信息
        /// </summary>
        /// <param name="decryptConsigneeRequest"></param>
        /// <returns></returns>
        [HttpPost]
        public ConsigneeSimpleResponse DecryptConsignee([FromBody] DecryptConsigneeRequest decryptConsigneeRequest)
        {
            return orderBusiness.DecryptConsignee(decryptConsigneeRequest);
        }

        /// <summary>
        /// 自动计算成本
        /// </summary>
        /// <param name="autoCalculationCostRequest"></param>
        [HttpPost]
        public void AutoCalculationCost([FromBody] AutoCalculationCostRequest autoCalculationCostRequest)
        {
            orderBusiness.AutoCalculationCost(autoCalculationCostRequest);
        }

        /// <summary>
        /// 手动计算成本
        /// </summary>
        /// <param name="manualCalculationCostRequest"></param>
        [HttpPost]
        public void ManualCalculationCost([FromBody] ManualCalculationCostRequest manualCalculationCostRequest)
        {
            orderBusiness.ManualCalculationCost(manualCalculationCostRequest);
        }

        /// <summary>
        /// 设置刷单成本
        /// </summary>
        /// <param name="sdCalculationCostRequest"></param>
        [HttpPost]
        public void SDCalculationCost([FromBody] SDCalculationCostRequest sdCalculationCostRequest)
        {
            orderBusiness.SDCalculationCost(sdCalculationCostRequest);
        }

        /// <summary>
        /// 关联采购单V2
        /// </summary>
        /// <param name="relationPurchaseOrderRequestV2"></param>
        [HttpPost]
        public void RelationPurchaseOrderV2([FromBody] RelationPurchaseOrderRequestV2 relationPurchaseOrderRequestV2)
        {
            orderBusiness.RelationPurchaseOrderV2(relationPurchaseOrderRequestV2);
        }

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

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

        /// <summary>
        /// 刷单组拉取订单
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public OrderResponse SDGroupPullOrder([FromBody] SDGroupPullOrderRequest request)
        {
            return orderBusiness.SDGroupPullOrder(request);
        }

        /// <summary>
        /// 查询订单SKU列表
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public ExportOrderSkuListResponse QueryOrderSkuList([FromBody] QueryOrderSkuRequest request)
        {
            return orderBusiness.QueryOrderSkuList(request);
        }

        /// <summary>
        /// 导出订单SKU列表
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public IList<ExportOrderSkuResponse> ExportOrderSkuList([FromBody] ExportOrderSkuRequest request)
        {
            return orderBusiness.ExportOrderSkuList(request);
        }

        /// <summary>
        /// 查询订单优惠明细
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public OrderCouponDetailResponse GetOrderCouponDetail([FromBody] QueryOrderCouponDetailRequest request)
        {
            return orderBusiness.GetOrderCouponDetail(request);
        }
    }
}