using Bp.Sync.Domain.Elastics.BaseEntities;
using Bp.Sync.Domain.Entities.Inventories.Products;
using System;

namespace Bp.Sync.Domain.Elastics.Inventories.Products
{
    public class ProductInventoryElastic : ElasticBaseEntityWithKey<long>
    {
        public long ProductId { get; set; }

        /// <summary>
        /// Mã lưu kho - dùng để in barcode
        /// </summary>
        public string InventoryCode { get; set; }

        /// <summary>
        /// Ngày nhập từ NCC ở phiếu nhập từ NCC
        /// </summary>
        public DateTimeOffset? InventoryCodeInboundCreatedTime { get; set; }

        /// <summary>
        /// Phiếu nhập từ NCC
        /// </summary>
        public long? InventoryCodeBillId { get; set; }

        /// <summary>
        /// Trạng thái
        /// </summary>
        public Status Status { get; set; }

        /// <summary>
        /// Trạng thái vật lý
        /// </summary>
        public PhysicalStatus PhysicalStatus { get; set; }

        /// <summary>
        /// Số lượng tồn
        /// </summary>
        public decimal Quantity { get; set; }

        /// <summary>
        /// Giá nhập
        /// </summary>
        public decimal CostPrice { get; set; }

        /// <summary>
        /// Giá bán
        /// </summary>
        public decimal Price { get; set; }

        /// <summary>
        /// Số lượng đã sắp xếp vị trí
        /// </summary>
        public decimal QuantityArranged { get; set; }

        /// <summary>
        /// Id nhà cung cấp
        /// </summary>
        public int SupplierId { get; set; }

        /// <summary>
        /// Id chi nhánh
        /// </summary>
        public int BranchId { get; set; }

        public decimal Amount => Price * Quantity;
        public decimal CostAmount => CostPrice * Quantity;

        //gia trung binh
        //public decimal? OutBoundCostPrice { get; set; }
        //public decimal? TotalOutBoundCostPrice => OutBoundCostPrice.HasValue ? OutBoundCostPrice.Value * Quantity : 0;

        public decimal? ProductBillPrice { get; set; }
        public long ProductBillVocherDateToLong { get; set; }

        /// <summary>
        /// Ngày hết hạn
        /// </summary>
        public DateTimeOffset? ExpiryDate { get; set; }
    }
}