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

namespace Bp.Sync.Domain.Entities.Inventories.Orders
{
    public class ProductOrder : BaseEntityWithKey<long>
    {
        /// <summary>
        /// Mã đơn đặt hàng
        /// </summary>
        public long OrderId { get; set; }
        /// <summary>
        /// Mã sản phẩm
        /// </summary>
        public long ProductId { get; set; }
        /// <summary>
        /// Số lượng đặt hàng
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal Quantity { get; set; }
        /// <summary>
        /// Số lượng tồn kho tại FC
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal FcQuantityInStock { get; set; }
        /// <summary>
        /// Số lượng thực tế
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal ActualQuantity { get; set; }
        /// <summary>
        /// Giá bán
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal Price { get; set; }
        /// <summary>
        /// Chiết khấu 
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal Discount { get; set; }
        /// <summary>
        /// Thuế VAT
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal Tax { get; set; }
        /// <summary>
        /// Id đơn vị tính
        /// </summary>
        public int UnitId { get; set; }
        /// <summary>
        /// Id vị trí
        /// </summary>
        public long LocationId { get; set; }
        /// <summary>
        /// Id của lô
        /// </summary>
        public long BatchId { get; set; }
        /// <summary>
        /// Mã lưu kho
        /// </summary>
        [Column(TypeName = "nvarchar(64)")]
        public string InventoryCode { get; set; }
        /// <summary>
        /// Mô tả / lý do / diễn giải
        /// </summary>
        [Column(TypeName = "nvarchar(1024)")]
        public string Description { get; set; }
        /// <summary>
        /// Nội dung phản hồi
        /// </summary>
        [Column(TypeName = "nvarchar(1024)")]
        public string FeedbackContent { get; set; }
        /// <summary>
        /// Số lượng Max của chi nhánh
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal MaxQuantity { get; set; }
        /// <summary>
        /// ID của bản ghi cha
        /// </summary>
        public long ParentId { get; set; }
        /// <summary>
        /// ID của khuyến mãi
        /// </summary>
        public int PromotionId { get; set; }
        /// <summary>
        /// Trạng thái
        /// </summary>
        public ProductOrderStatus ProductOrderStatus { get; set; }
        /// <summary>
        /// ID của lý do
        /// </summary>
        public int ReasonId { get; set; }
    }

    public enum ProductOrderStatus
    {
        [Description("Đang xử lý")]
        Pending = 1,
        [Description("Từ chối")]
        Reject = 2,
        [Description("Đã xuất")]
        Eported = 3
    }
}
