using Lada.Framework.Data.Domains.Categories;
using Lada.Framework.Data.Domains.Hr;
using Lada.Framework.Data.Enums;
using Microsoft.AspNetCore.Identity;
using System.ComponentModel.DataAnnotations;

namespace Lada.Framework.Data.Domains.Identity
{
    public class User : IdentityUser<int>
    {

        #region Thông tin chung
        public DateTimeOffset CreatedTime { get; set; }

        public DateTimeOffset UpdatedTime { get; set; }
        [MaxLength(512)]
        public string Address { get; set; }

        public bool IsDeleted { get; set; }

        [MaxLength(256)]
        public string Password { get; set; }
        #endregion

        #region Thông tin cá nhân


        /// <summary>
        /// Họ và tên
        /// </summary>
        [MaxLength(256)]
        public string FullName { get; set; }

        /// <summary>
        /// Giới tính
        /// </summary>
        public Gender? Gender { get; set; }

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

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

        /// <summary>
        /// Ngày sinh
        /// </summary>
        public DateTimeOffset? DateOfBirth { get; set; }
        #endregion

        #region Thông tin phân loại / quản lý
        /// <summary>
        /// Loại người dùng
        /// </summary>
        public UserType UserType { get; set; }

        /// <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ã đại lý
        /// Nếu là Ladaer thì đây là phòng ban
        /// Nếu là FC thì đây là chi nhánh
        /// </summary>
        public int? AgencyId { get; set; }

        /// <summary>
        /// ID của Permission Group được gán cho User
        /// Khi thay đổi PermissionId, hệ thống sẽ tự động cập nhật UserRole
        /// </summary>
        public int? PermissionId { get; set; }

        public int CreatedBy { get; set; }

        [MaxLength(155)]
        public string CreatedByUserName { get; set; }

        public int UpdatedBy { get; set; }

        [MaxLength(155)]
        public string UpdatedByUserName { get; set; }

        #endregion

        public virtual ICollection<UserRole> UserRoles { get; set; }

        /// <summary>
        /// Navigation property đến Permission
        /// </summary>
        public virtual Permission? Permission { get; set; }

        //public virtual Agency? Agency { get; set; }

        /// <summary>
        /// Distinguished name từ hệ thống 3CX để mapping với CallLog
        /// </summary>
        [MaxLength(50)]
        public string? FinalDN { get; set; }

        public ICollection<Attendance> Attendances { get; set; }
    }


}
