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; }

        public List<SystemDocConfirmedUser> SystemDocConfirmedList { get; set; }

        public List<UserDoctor> UserDoctors { get; set; } = new List<UserDoctor>();
        public List<UserRole> UserRoleList { get; set; } = new List<UserRole>();
        public List<TrialUser> UserTrials { get; set; } = new List<TrialUser>();


        [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;

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

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