using Bp.Sync.Domain.Elastics.BaseEntities;
using System;
using System.ComponentModel.DataAnnotations.Schema;

namespace Bp.Sync.Domain.Elastics.Inventories.Configurations
{
    public class DiscountBranchDetailConfigElastic : ElasticBaseEntityWithKey<long>
    {
        public int DiscountBranchConfigId { get; set; }

        /// <summary>
        /// Ngày bắt đầu áp dụng
        /// </summary>
        public DateTimeOffset? StartDate { get; set; }

        /// <summary>
        /// Ngày kết thúc áp dụng
        /// </summary>
        public DateTimeOffset? EndDate { get; set; }

        /// <summary>
        /// Đơn giá
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal Price { get; set; }

        /// <summary>
        /// Đơn giá ĐVNN
        /// </summary>
        public decimal BasePrice => Exchange != 0 ? Price / Exchange : Price;

        /// <summary>
        /// % Chiết khấu cho chi nhánh / FC
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal BranchDiscount { get; set; }

        /// <summary>
        /// % Chiết khấu cho nhân viên
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal StaffDiscount { get; set; }

        /// <summary>
        /// Số lượng nhập tối thiểu
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal MinInboundQuantity { get; set; }

        /// <summary>
        /// Số lượng xuất bán tối thiểu
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal MinOutboundQuantity { get; set; }

        /// <summary>
        /// Số lượng nhập tối thiểu ĐVNN
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal MinInboundBaseQuantity => MinInboundQuantity * Exchange;

        /// <summary>
        /// Số lượng xuất bán tối thiểu ĐVNN
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal MinOutboundBaseQuantity => MinInboundQuantity * Exchange;

        /// <summary>
        /// ID của sản phẩm
        /// </summary>
        public long ProductId { get; set; }

        /// <summary>
        /// ID của đơn vị tính
        /// </summary>
        public int UnitId { get; set; }

        public string UnitName { get; set; }
        public decimal Exchange { get; set; }

        /// <summary>
        /// ID của đơn vị tính ĐVNN
        /// </summary>
        public int BaseUnitId { get; set; }

        public string BaseUnitName { get; set; }

        /// <summary>
        /// ID của chi nhánh / FC
        /// </summary>
        public int BranchId { get; set; }
    }
}