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

namespace Bp.Sync.Domain.Entities.Inventories.Suppliers
{
    public class Supplier : BaseEntityWithKey<int>
    {
        /// <summary>
        /// Mã nhà cung cấp (NCC)
        /// </summary>
        [Column(TypeName = "nvarchar(128)")]
        public string Code { get; set; }

        /// <summary>
        /// Tên NCC
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string Name { get; set; }

        /// <summary>
        /// Địa chỉ NCC
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string Address { get; set; }

        /// <summary>
        /// Mã tỉnh / thành phố NCC
        /// </summary>
        public int CityId { get; set; }

        /// <summary>
        /// Mã quận / huyện NCC
        /// </summary>
        public int DistrictId { get; set; }

        /// <summary>
        /// Mã phường / xã NCC
        /// </summary>
        public int WardId { get; set; }

        /// <summary>
        /// Số điện thoại NCC
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string Phone { get; set; }

        /// <summary>
        /// Email NCC
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string Email { get; set; }

        /// <summary>
        /// Tên công ty của NCC
        /// </summary>
        [Column(TypeName = "nvarchar(256)")]
        public string CompanyName { get; set; }

        /// <summary>
        /// Mã số thuế của công ty
        /// </summary>
        [Column(TypeName = "nvarchar(128)")]
        public string TaxCode { get; set; }

        /// <summary>
        /// Loại nhà cung cấp: doanh nghiệp hay cá nhân
        /// </summary>
        public SupplierType SupplierType { get; set; }

        /// <summary>
        /// Nhóm nhà cung cấp
        /// </summary>
        public SupplierGroup SupplierGroup { get; set; }

        /// <summary>
        /// Trạng thái
        /// </summary>
        public SupplierStatus SupplierStatus { get; set; } = SupplierStatus.Active;

        /// <summary>
        /// Số dư nợ
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal DebitBalance { get; set; }

        /// <summary>
        /// Số dư có
        /// </summary>
        [Column(TypeName = "decimal(18, 5)")]
        public decimal CreditBalance { get; set; }
    }

    public enum SupplierStatus
    {
        [Description("Hoạt động")]
        Active = 1,

        [Description("Ngừng hoạt động")]
        InActive = 2
    }

    public enum SupplierGroup
    {
        [Description("Hàng hóa")]
        Goods = 1,

        [Description("Công cụ dụng cụ")]
        Equipments = 2
    }

    public enum SupplierType
    {
        [Description("Cá nhân")]
        Individual = 1,

        [Description("Doanh nghiệp")]
        Business = 2
    }
}