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

namespace Bp.Sync.Domain.Entities.Inventories.Customers
{
    public class Customer : BaseEntityWithKey<int>
    {
        /// <summary>
        /// Tên khách hàng
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string Name { get; set; }

        /// <summary>
        /// Mã khách hàng
        /// </summary>
        [Column(TypeName = "nvarchar(64)")]
        public string Code { get; set; }

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

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

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

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

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

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

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

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

        /// <summary>
        /// Giấy phép kinh doanh
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string BusinessLicense { get; set; }

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

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

        /// <summary>
        /// Giới tính (true: nam, false: nữ)
        /// </summary>
        public bool? Sex { get; set; }

        /// <summary>
        /// Ngày/tháng/năm sinh
        /// </summary>
        public DateTimeOffset? DateOfBirth { get; set; }

        /// <summary>
        /// Mã chi nhánh (thuộc chi nhánh nào)
        /// </summary>
        public int BranchId { get; set; }

        /// <summary>
        /// Loại khách hàng
        /// </summary>
        public CustomerType CustomerType { get; set; }

        /// <summary>
        /// Trạng thái
        /// </summary>
        public CustomerStatus CustomerStatus { get; set; } = CustomerStatus.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; }

        /// <summary>
        /// ID người quản lý
        /// </summary>
        public int ManagerId { get; set; }
    }

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

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

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

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