using BBWYB.Server.Model.Db;

namespace BBWYB.Server.Business.Extensions
{
    public static class OrderAmountExtension
    {
        /// <summary>
        /// 计算订单sku明细的成本和利润
        /// </summary>
        /// <param name="ocd">订单SKU明细成本对象</param>
        /// <param name="skuProductAmount">sku商品金额(收入)</param>
        /// <param name="skuBuyerPayFreight">sku买家支付运费(收入)</param>
        /// <param name="skuInPackAmount">sku实收打包费(收入)</param>
        /// <param name="skuPurchaseProductAmount">sku采购货款(支出)</param>
        /// <param name="skuPurchaseFreight">sku采购运费(支出)</param>
        /// <param name="skuOutPackAmount">sku支出打包费(支出)</param>
        /// <param name="skuDeliveryExpressFreight">sku发货运费(支出)</param>
        public static void CalculationOrderCostDetailCostAndProfit(this OrderCostDetail ocd,
                                                                   decimal skuProductAmount,
                                                                   decimal skuBuyerPayFreight,
                                                                   decimal skuInPackAmount,
                                                                   decimal skuPurchaseProductAmount,
                                                                   decimal skuPurchaseFreight,
                                                                   decimal skuOutPackAmount,
                                                                   decimal skuDeliveryExpressFreight)
        {
            ocd.SkuAmount = skuPurchaseProductAmount;
            ocd.PurchaseFreight = skuPurchaseFreight;
            ocd.OutPackAmount = skuOutPackAmount;
            ocd.DeliveryExpressFreight = skuDeliveryExpressFreight;
            ocd.TotalCost = ocd.SkuAmount + ocd.PurchaseFreight + ocd.OutPackAmount + ocd.DeliveryExpressFreight;  //采购货款+采购运费+支出打包费+发货运费
            ocd.Profit = skuProductAmount + skuBuyerPayFreight + skuInPackAmount - ocd.TotalCost; //SKU货款+买家支付运费+SKU打包费 - SKU总成本
        }

        /// <summary>
        /// 计算订单的成本和利润
        /// </summary>
        /// <param name="oc"></param>
        /// <param name="orderAmount">订单金额(包含买家支付运费和收入打包费)</param>
        /// <param name="purchaseProductAmount">采购货款</param>
        /// <param name="purchaseFreight">采购运费</param>
        /// <param name="outPackAmount">支出打包费</param>
        /// <param name="deliveryExpressFreight">发货运费</param>
        public static void CalculationOrderCostCostAndProfit(this OrderCost oc,
                                                             decimal orderAmount,
                                                             decimal purchaseProductAmount,
                                                             decimal purchaseFreight,
                                                             decimal outPackAmount,
                                                             decimal deliveryExpressFreight)
        {
            oc.PurchaseAmount = purchaseProductAmount + purchaseFreight; //兼容以前

            oc.SkuAmount = purchaseProductAmount;
            oc.PurchaseFreight = purchaseFreight;
            oc.OutPackAmount = outPackAmount;
            oc.DeliveryExpressFreight = deliveryExpressFreight;
            oc.TotalCost = oc.SkuAmount + oc.PurchaseFreight + oc.OutPackAmount + oc.DeliveryExpressFreight;
            oc.Profit = orderAmount - oc.TotalCost;
        }
    }
}