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

namespace Bp.Sync.Domain.Entities.Inventories.Generals
{
    /// <summary>
    /// Sổ cái kế toán
    /// </summary>
    public class GeneralLedger : BaseEntityWithKey<long>
    {
        /// <summary>
        /// ID của KH/NCC
        /// </summary>
        public int PartnerId { get; set; }
        /// <summary>
        /// Mã
        /// </summary>
        [Column(TypeName = "nvarchar(64)")]
        public string PartnerCode { get; set; }
        /// <summary>
        /// Tên đối tượng khác
        /// </summary>
        [Column(TypeName = "nvarchar(256)")]
        public string PartnerName2 { get; set; }
        /// <summary>
        /// Loại đối tượng
        /// </summary>
        public PartnerType PartnerType { get; set; }
        /// <summary>
        /// Ngày hạch toán
        /// </summary>
        public DateTimeOffset? AccountingDate { get; set; }
        /// <summary>
        /// Ngày chứng từ
        /// </summary>
        public DateTimeOffset? VocherDate { get; set; }
        /// <summary>
        /// Loại sổ
        /// </summary>
        public BookType BookType { get; set; }
        /// <summary>
        /// Loại chứng từ
        /// </summary>
        public VocherType VocherType { get; set; }
        /// <summary>
        /// Mã chứng từ
        /// </summary>
        [Column(TypeName = "nvarchar(64)")]
        public string VocherCode { get; set; }
        /// <summary>
        /// Diễn giải
        /// </summary>
        [Column(TypeName = "nvarchar(1024)")]
        public string Description { get; set; }
        /// <summary>
        /// Mã tài khoản công nợ
        /// </summary>
        [Column(TypeName = "nvarchar(64)")]
        public string AccountCode { get; set; }
        /// <summary>
        /// Mã tài khoản đối ứng
        /// </summary>
        [Column(TypeName = "nvarchar(64)")]
        public string ReciprocalAccountCode { get; set; }
        /// <summary>
        /// Giá trị phát sinh nợ
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal DebitIncurredValue { get; set; }
        /// <summary>
        /// Giá trị phát sinh có
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal CreditIncurredValue { get; set; }
        /// <summary>
        /// Giá trị số dư nợ
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal DebitBalanceValue { get; set; }
        /// <summary>
        /// Giá trị số dư có
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal CreditBalanceValue { get; set; }
        /// <summary>
        /// Giá trị số dư (trong sổ quỹ)
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal BalanceValue { get; set; }
        /// <summary>
        /// ID của VocherAccount
        /// </summary>
        public long VocherAccountId { get; set; }
        /// <summary>
        /// Là hạch toán kết chuyển?
        /// </summary>
        public bool IsAccountingEntry { get; set; }
        /// <summary>
        /// ID của EquipmentReceipt
        /// </summary>
        public long EquipmentReceiptId { get; set; }
        /// <summary>
        /// Đã cập nhật số dư chưa 
        /// </summary>
        public bool IsUpdatedBalance { get; set; }
    }

    public enum BookType
    {
        [Description("Sổ kế toán")]
        Accountant = 1,
        [Description("Sổ vận hành")]
        Operation = 2,
        [Description("Sổ chi tiết tài khoản")]
        AccountDetailBook = 3,
        [Description("Phải thu")]
        Receivable = 4,
        [Description("Phải trả")]
        ToPayDebt = 5
    }
}
