using Bp.Sync.Domain.Elastics.BaseEntities;
using System;

namespace Bp.Sync.Domain.Elastics.FcBusinesses.Products
{
    public class FcProductStorageElastic : ElasticBaseEntityWithKey<long>
    {
        public string InventoryCode { get; set; }
        public long ProductId { get; set; }
        public int BranchId { get; set; }
        /// <summary>
        /// Thêm vào để làm báo cáo tồn kho theo NCC
        /// Id nhà cung cấp
        /// </summary>
        public int? SupplierId { get; set; }
        /// <summary>
        /// Số lượng nhỏ nhất
        /// </summary>
        public decimal CurrentQuantity { get; set; }
        /// <summary>
        /// đơn vị nhỏ nhất
        /// </summary>
        public int CurrentUnitId { get; set; }
        /// <summary>
        /// Nhà cung cấp
        /// </summary>
        public int PartnerId { get; set; }
        public long? PositionId { get; set; }
        public decimal LastInboundCost { get; set; }
        public decimal LastInboundPrice { get; set; }
        public decimal LastInboundWholesalePrice { get; set; }
        /// <summary>
        /// Đơn vị hiện tại
        /// </summary>
        public int LastInboundUnitId { get; set; }
        /// <summary>
        /// Số lượng hiện tại
        /// </summary>
        public decimal LastInboundQuantity { get; set; }

        public decimal TotalCost => BaseUnitInboundCost.HasValue ? BaseUnitInboundCost.Value * CurrentQuantity : 0;
        public decimal TotalPrice => BaseUnitInboundPrice.HasValue ? BaseUnitInboundPrice.Value * CurrentQuantity : 0;
        public decimal Revenue => TotalPrice - TotalCost;
        public double RevenueRate => TotalCost > 0 ? Math.Round((double)Revenue * 100 / (double)TotalCost, 2) : 0;

        public decimal? BaseUnitInboundCost { get; set; }
        public decimal? BaseUnitInboundPrice { get; set; }


        public string ProductName { get; set; }
        public string ProductCode { get; set; }
        public string ProductPartnerCode { get; set; }
        public string CurrentUnitName { get; set; }
        public string LastInboundUnitName { get; set; }
        public DateTimeOffset? ExpiryDate { get; set; }

        /// <summary>
        /// Tổng giá nhập trung bình theo đơn vị nhỏ nhất
        /// </summary>
        public decimal CurrentTotalCostPrice { get; set; }
        /// <summary>
        /// Giá nhập trung bình theo đơn vị nhỏ nhất
        /// </summary>
        public decimal CurrentCostPrice { get; set; }
    }
}
