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

namespace Bp.Sync.Domain.Entities.Inventories.Branches
{
    public class Branch : BaseEntityWithKey<int>
    {
        /// <summary>
        /// Tên chi nhánh
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string Name { 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>
        /// Giấy phép kinh doanh
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string BusinessLicense { get; set; }

        /// <summary>
        /// Người chịu trách nhiệm: Tên
        /// </summary>
        [Column(TypeName = "nvarchar(200)")]
        public string ResponsiblePersonName { get; set; }

        /// <summary>
        /// Người chịu trách nhiệm: Số điện thoại
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string ResponsiblePersonPhone { get; set; }

        /// <summary>
        /// Người chịu trách nhiệm: Email
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string ResponsiblePersonEmail { get; set; }

        /// <summary>
        /// Người chịu trách nhiệm: CMTND / Thẻ căn cước
        /// </summary>
        [Column(TypeName = "nvarchar(512)")]
        public string ResponsiblePersonIdentityCard { get; set; }

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

        /// <summary>
        /// ID của chi nhánh cha
        /// </summary>
        public int ParentId { get; set; }

        /// <summary>
        /// Loại chi nhánh
        /// </summary>
        public BranchType BranchType { get; set; }

        /// <summary>
        /// Hệ số chi nhánh
        /// </summary>
        public float Coefficient { get; set; }

        /// <summary>
        /// Mã cơ sở (liên thông)
        /// </summary>
        [Column(TypeName = "nvarchar(128)")]
        public string BranchCode { get; set; }

        /// <summary>
        /// Tài khoản kết nối (liên thông)
        /// </summary>
        [Column(TypeName = "nvarchar(128)")]
        public string UserName { get; set; }

        /// <summary>
        /// Mật khẩu tài khoản kết nối (liên thông)
        /// </summary>
        [Column(TypeName = "nvarchar(128)")]
        public string Password { get; set; }

        /// <summary>
        /// Ngày dự kiến xuất hàng đến
        /// </summary>
        [Column(TypeName = "nvarchar(32)")]
        public string ExpectedOutboundDates { get; set; }

        public bool IsAutoSyncDav { get; set; } = false;
    }

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

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

    public enum BranchType
    {
        [Description("Chi nhánh")]
        Branch = 1,

        [Description("FC")]
        Franchise = 2,

        [Description("Kho tổng")]
        SC = 3
    }
}