using BBWYB.Server.Model;
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto;

namespace BBWYB.Server.Business.Extensions
{
    public static class PurchaseExpressOrderExtension
    {
        /// <summary>
        /// 计算快递单归属
        /// </summary>
        /// <param name="purchaseExpressOrder">必须是经过与快递单关系表进行联合查询的结果 (ExpressOrderRelationInfo-PurchaseExpressOrder)</param>
        /// <param name="intoStoreType"></param>
        /// <param name="orderPurchaseInfoList"></param>
        /// <param name="orderPurchaseRelationInfoList"></param>
        /// <param name="orderPurchaseSkuInfoList"></param>
        public static void CalculationBelongOrderSku(this PurchaseExpressOrderResponse purchaseExpressOrder,
                                                     Enums.IntoStoreType? intoStoreType,
                                                     IList<OrderPurchaseInfoResponse> orderPurchaseInfoList,
                                                     IList<OrderPurchaseRelationInfo> orderPurchaseRelationInfoList,
                                                     IList<OrderPurchaseSkuInfoResponse> orderPurchaseSkuInfoList)
        {
            var purchaseOrder = orderPurchaseInfoList.FirstOrDefault(po => po.PurchaseOrderId == purchaseExpressOrder.PurchaseOrderId);
            if (purchaseOrder == null)
                return;
            if (purchaseOrder.PurchasePlatform == Enums.Platform.阿里巴巴 && intoStoreType != Enums.IntoStoreType.厂商代发入仓)
            {
                var purchaseSkuIds = orderPurchaseSkuInfoList.Where(posku => posku.WaybillNo == purchaseExpressOrder.WaybillNo &&
                                                                             posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId)
                                                             .Select(posku => posku.PurchaseSkuId).ToList();
                var orderSkuIds = orderPurchaseRelationInfoList.Where(ori => ori.PurchaseOrderId == purchaseOrder.PurchaseOrderId &&
                                                                             purchaseSkuIds.Contains(ori.PurchaseSkuId))
                                              .Select(ori => ori.BelongSkuId)
                                              .Distinct()
                                              .ToList();
                purchaseExpressOrder.BelongSkuIds = string.Join(",", orderSkuIds);
            }
            else
            {
                purchaseExpressOrder.BelongSkuIds = purchaseOrder.BelongSkuIds;
            }
        }
    }
}