using BBWYB.Common.Models;
using BBWYB.Server.API.Filters;
using BBWYB.Server.Business;
using BBWYB.Server.Model.Dto;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace BBWYB.Server.API.Controllers
{
    [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
    public class PurchaseOrderController : BaseApiController
    {
        private PurchaseOrderBusiness purchaseOrderBusiness;

        public PurchaseOrderController(IHttpContextAccessor httpContextAccessor, PurchaseOrderBusiness purchaseOrderBusiness) : base(httpContextAccessor)
        {
            this.purchaseOrderBusiness = purchaseOrderBusiness;
        }

        /// <summary>
        /// 预览订单
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public PreviewOrderResponse PreviewPurchaseOrder([FromBody] PreviewOrderRequest request)
        {
            return purchaseOrderBusiness.PreviewPurchaseOrder(request);
        }

        /// <summary>
        /// 创建采购单
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void CreatePurchaseOrder([FromBody] CreateOrderRequest request)
        {
            purchaseOrderBusiness.CreatePurchaseOrder(request);
        }

        /// <summary>
        /// 获取关联采购单列表
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        [HttpGet("{orderId}")]
        public IList<AssociationPurchaseOrderResponse> GetAssociationPurchaseOrderList([FromRoute] string orderId)
        {
            return purchaseOrderBusiness.GetAssociationPurchaseOrderList(orderId);
        }

        /// <summary>
        /// 关联采购单
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void AssociatePurchaseOrder([FromBody] AssociationOrderRequest request)
        {
            purchaseOrderBusiness.AssociatePurchaseOrder(request);
        }

        /// <summary>
        /// 预览关联采购单 (自动匹配订单sku与采购金额) (不支持关联预览的采购平台将返回null)
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost]
        public AssociationPurchaseOrderResponse PreviewAssocationPurchaseOrder([FromBody] AssocationPurchaseOrderPreviewRequest request)
        {
            return purchaseOrderBusiness.PreviewAssocationPurchaseOrder(request);
        }

        /// <summary>
        /// 修改采购快递单
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void EditPurchaseExpressOrder([FromBody] EditPurchaseExpressOrderRequest request)
        {
            purchaseOrderBusiness.EditPurchaseExpressOrder(request);
        }

        /// <summary>
        /// 设置历史采购单
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void SetHistoryPurchaseOrder([FromBody] SetHistoryPurchaseOrderRequest request)
        {
            purchaseOrderBusiness.SetHistoryPurchaseOrder(request);
        }

        /// <summary>
        /// 删除历史采购单
        /// </summary>
        /// <param name="request"></param>
        [HttpDelete]
        public void DeletePurchaseOrder([FromBody] DeletePurchaseOrderRequest request)
        {
            request.IsDelete = true;
            purchaseOrderBusiness.SetHistoryPurchaseOrder(request);
        }

        /// <summary>
        /// 手动签收采购单
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void SignPurchaseOrder([FromBody] SignPurchaseOrderRequest request)
        {
            throw new BusinessException("SignPurchaseOrder接口已经停用");
            //purchaseOrderBusiness.SignPurchaseOrder(request);
        }

        /// <summary>
        /// 手动发货
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void ManualDelivery([FromBody] ManualDeliveryRequest request)
        {
            purchaseOrderBusiness.ManualDelivery(request);
        }

        /// <summary>
        /// 设置快递单和入仓采购单(厂商代发入仓订单专用)
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void PurchaserDelivery([FromBody] PurchaserDeliveryRequest request)
        {
            purchaseOrderBusiness.PurchaserDelivery(request);
        }

        /// <summary>
        /// 手动收货
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void ManualSign([FromBody] ManualSignRequest request)
        {
            purchaseOrderBusiness.ManualSign(request);
        }

        /// <summary>
        /// 批量手动收货
        /// </summary>
        /// <param name="request"></param>
        [HttpPost]
        public void BatchManualSign([FromBody] BatchManualSignRequest request)
        {
            purchaseOrderBusiness.BatchManualSign(request);
        }

        /// <summary>
        /// 1688回调
        /// </summary>
        /// <param name="message"></param>
        /// <param name="_aop_signature"></param>
        [HttpPost]
        [AllowAnonymous]
        public void CallbackFrom1688([FromForm] string message, [FromForm] string _aop_signature)
        {
            purchaseOrderBusiness.CallbackFrom1688(message);
        }

        [Consumes("application/x-www-form-urlencoded")]
        [HttpPost]
        [AllowAnonymous]
        public IActionResult KuaiDi100Publish([FromForm] string sign, [FromForm] string param)
        {
            #region 去掉本次请求的DTO格式
            var filters = ControllerContext.ActionDescriptor.FilterDescriptors;
            var filterToRemove = filters.FirstOrDefault(f => f.Filter.GetType() == typeof(ResultFilter));
            if (filterToRemove != null)
                filters.Remove(filterToRemove);
            #endregion

            purchaseOrderBusiness.KuaiDi100Publish(param);
            return new JsonResult(new
            {
                result = true,
                returnCode = "200",
                message = "成功"
            });
        }
    }
}