using Lada.Framework.Data.Domains.BaseEntities;
using Lada.Framework.Data.Domains.Finance.Quotations;
using Lada.Framework.Data.Domains.Orders;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace Lada.Framework.Data.Domains.Crm
{
    public class Customer : BaseEntityWithKey<int>
    {
        #region Thông tin chung
        /// <summary>
        /// Họ và tên
        /// </summary>
        [MaxLength(256)]
        public string FullName { get; set; } = "";

        /// <summary>
        /// Số điện thoại
        /// </summary>
        [MaxLength(128)]
        public string PhoneNumber { get; set; } = "";


        /// <summary>
        /// Địa chỉ
        /// </summary>
        [MaxLength(512)]
        public string Address { get; set; }

        /// <summary>
        /// Địa chỉ email
        /// </summary>
        [MaxLength(128)]
        public string Email { get; set; }



        /// <summary>
        /// Liên hệ zalo
        /// </summary>
        [MaxLength(512)]
        public string ZaloContact { get; set; } = "";

        /// <summary>
        /// Liên hệ zalo
        /// </summary>
        [MaxLength(512)]
        public string FacebookContact { get; set; } = "";
        #endregion


        /// <summary>
        /// Người quản lý
        /// Nếu là khách hàng thì chính là sale quản lý
        /// Nếu là nhân viên thì người quản lý trực tiếp là ai
        /// </summary>
        public int ManagerId { get; set; }

        /// <summary>
        /// Mã người dùng
        /// </summary>
        public int UserId { get; set; }

        /// <summary>
        /// Tên đăng nhập
        /// </summary>
        [MaxLength(128)]
        public string UserName { get; set; } = "";


        /// <summary>
        /// Trạng thái khách hàng
        /// </summary>
        public CustomerStatus Status { get; set; }

        /// <summary>
        /// Có phải là khách hàng mặc định không?
        /// Khách hàng này chỉ dùng để cấu hình và lưu đơn lẻ
        /// </summary>
        public bool IsDefaultCustomer { get; set; }

        /// <summary>
        /// Sử dụng bảng giá riêng
        /// Nếu là true thì sẽ có bảng giá riêng, ngược lại lấy bảng giá mặc định
        /// </summary>
        public bool UseCustomPriceList { get; set; }

        public virtual IEnumerable<CustomerAddress> Addresses { get; set; }
        public virtual IEnumerable<Order> Orders { get; set; }
        public virtual IEnumerable<Price> Prices { get; set; }
        public virtual IEnumerable<CustomerBankAccount> BankAccounts { get; set; }
        public virtual IEnumerable<VatInfo> VatInfos { get; set; }

    }

    public enum CustomerStatus
    {
        [Description("Đang hoạt động")]
        Actived = 1,
        [Description("Dừng hoạt động")]
        Stopped = 2
    }

}
