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

namespace Bp.Sync.Domain.Entities.Inventories.Bills
{
    public class InboundBill : 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>
        /// 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á nhập 
        /// </summary>
        [Column(TypeName = "decimal(18, 8)")]
        public decimal CostPrice { get; set; }
        /// <summary>
        /// Giá bình quân đã xuất trước đó cho chi nhánh
        /// </summary>
        [Column(TypeName = "decimal(18, 8)")]
        public decimal PreCostPrice { get; set; }
        /// <summary>
        /// Giá bán lẻ
        /// </summary>
        [Column(TypeName = "decimal(18, 8)")]
        public decimal Price { get; set; }
        /// <summary>
        /// Giá bán sỉ
        /// </summary>
        [Column(TypeName = "decimal(18, 8)")]
        public decimal WholeSalePrice { 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 nhập kho
        /// </summary>
        public InboundStatus InboundStatus { get; set; } = InboundStatus.WaitToPrint;

        /// <summary>
        /// Chiết khấu trả trước (%)
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal PrepaidDiscount { get; set; }
        /// <summary>
        /// Chiết khấu trả sau (%)
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal PostpaidDiscount { get; set; }
        /// <summary>
        /// Thời gian nhập kho
        /// </summary>
        public DateTimeOffset? CompletedTime { get; set; }
        /// <summary>
        /// Đã nhận được tiền chiết khấu (true)
        /// </summary>
        public bool? IsReceivedDiscount { get; set; }
        /// <summary>
        /// Loại chiết khấu trả sau (có trong cấu hình giá nhập)
        /// </summary>
        public PostpaidDiscountType PostpaidDiscountType { get; set; }
        /// <summary>
        /// Thuế VAT(%) trong cấu hình giá nhập kho
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal TaxConfig { 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 enum InboundStatus
    {
        [Description("Chờ in nhãn")]
        WaitToPrint = 1,
        [Description("Chờ nhập")]
        WaitToInbound = 2,
        [Description("Đã nhập")]
        Received = 3
    }

    public enum PostpaidDiscountType
    {
        [Description("CKTS trước thuế")]
        BeforeTax = 1,
        [Description("CKTS sau thuế")]
        AfterTax = 2,
    }

}
