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

namespace Bp.Sync.Domain.Entities.Inventories.Bills
{
    public class OutboundBill : BaseEntityWithKey<long>
    {
        /// <summary>
        /// Mã phiếu
        /// </summary>
        public long BillId { get; set; }

        /// <summary>
        /// Id sản phẩm
        /// </summary>
        public long ProductId { 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>
        public string InventoryCode { get; set; }

        /// <summary>
        /// Số lượng
        /// </summary>
        [Column(TypeName = "decimal(18, 8)")]
        public decimal Quantity { get; set; }

        /// <summary>
        /// Giá xuất bán
        /// </summary>
        [Column(TypeName = "decimal(18, 8)")]
        public decimal Price { get; set; }

        /// <summary>
        /// Giá vốn
        /// </summary>
        [Column(TypeName = "decimal(18, 8)")]
        public decimal CostPrice { get; set; }

        /// <summary>
        /// Chiết khấu
        /// </summary>
        [Column(TypeName = "decimal(18, 8)")]
        public decimal Discount { get; set; }

        /// <summary>
        /// Thuế VAT
        /// </summary>
        [Column(TypeName = "decimal(18, 8)")]
        public decimal Tax { get; set; }

        /// <summary>
        /// Trạng thái xuất kho
        /// </summary>
        public OutboundStatus OutboundStatus { get; set; }

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

        ///// <summary>
        ///// Mã tài khoản nợ
        ///// </summary>
        //[Column(TypeName = "nvarchar(64)")]
        //public string DebitAccountCode { get; set; }
        ///// <summary>
        ///// Mã tài khoản thuế
        ///// </summary>
        //[Column(TypeName = "nvarchar(64)")]
        //public string TaxAccountCode { get; set; }
        ///// <summary>
        ///// Mã tài khoản có
        ///// </summary>
        //[Column(TypeName = "nvarchar(64)")]
        //public string CreditAccountCode { get; set; }
        public long ParentId { get; set; }
    }

    public enum OutboundStatus
    {
        [Description("Chờ xuất")]
        WaitToExport = 1,

        [Description("Đã xuất")]
        Exported = 3
    }
}