using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using EntityFrameworkCore.Projectables;
using IRaCIS.Core.Domain.Share;

namespace IRaCIS.Core.Domain.Models
{
    [Table("User")]
    public partial class User : Entity, IAuditAdd, IAuditUpdate
    {
        [ForeignKey("UserTypeId")]
        public UserType UserTypeRole { get; set; }

        [JsonIgnore]
        public List<SystemDocConfirmedUser> SystemDocConfirmedList { get; set; }
        [JsonIgnore]
        public List<UserDoctor> UserDoctors { get; set; } = new List<UserDoctor>();
        [JsonIgnore]
        public List<TrialUser> UserTrials { get; set; } = new List<TrialUser>();

        [JsonIgnore]
        public List<VisitTask> VisitTaskList { get; set; }


        [StringLength(255)]
        public string UserName { get; set; } = String.Empty;

        [StringLength(255)]
        public string Password { get; set; } = String.Empty;
        [StringLength(255)]

        public string LastName { get; set; } = String.Empty;
        public string FirstName { get; set; } = String.Empty;

        public string Phone { get; set; } = string.Empty;
        public string EMail { get; set; } = string.Empty;
        public int Sex { get; set; }
        public UserStateEnum Status { get; set; } = UserStateEnum.Enable;

        public DateTime? LastLoginTime { get; set; }

        public Guid UserTypeId { get; set; } = Guid.Empty;


       // �ڲ��û�  �ⲿ�û�
        public bool IsZhiZhun { get; set; }

        public UserTypeEnum UserTypeEnum { get; set; }

        public string OrganizationName { get; set; } = String.Empty;

        public bool PasswordChanged { get; set; }

        //public Guid OrganizationId { get; set; } = Guid.Empty;
        //public Guid OrganizationTypeId { get; set; } = Guid.Empty;
        //public string OrganizationType { get; set; } = String.Empty;
        //public string UserType { get; set; } = string.Empty;
        //public bool SuperAdmin { get; set; } = false;
        //public string RealName { get; set; }

        public string UserCode { get; set; } = string.Empty;

        public int Code { get; set; }


        public string DepartmentName { get; set; } = String.Empty;

        public string PositionName { get; set; } = String.Empty;

        public Guid CreateUserId { get; set; }
        public DateTime CreateTime { get; set; }
        public Guid UpdateUserId { get; set; }
        public DateTime UpdateTime { get; set; }

        public bool IsFirstAdd { get; set; } = true;

        public string EmailToken { get; set; } = string.Empty;

        //ҽ�������˺ź󣬻���ֵ
        public Guid? DoctorId { get; set; }

        [JsonIgnore]
        [ForeignKey("DoctorId")]
        public Doctor Doctor { get; set; }


        public bool IsTestUser { get; set; }

        /// <summary>
        /// �Զ��л���һ������
        /// </summary>
        public bool AutoCutNextTask { get; set; } = false;

		[Projectable] public string FullName => LastName + " / " + FirstName;

        //[Projectable] public string FullName => $"{LastName} / {FirstName}";
    }
}