using IRaCIS.Core.Domain.Share;

namespace IRaCIS.Core.Domain.Models;

[Comment("医生 - 基础信息表")]
[Table("Doctor")]
public class Doctor : BaseFullAuditEntity
{
    #region 导航属性

    [Comment("导航属性")]
    [JsonIgnore]
    public List<DoctorDictionary> DoctorDicRelationList { get; set; } = new List<DoctorDictionary>();
    [JsonIgnore]
    public List<TrialExperienceCriteria> TrialExperienceCriteriaList { get; set; }
    [JsonIgnore]
    public List<Enroll> EnrollList { get; set; }

    [JsonIgnore]
    [ForeignKey("HospitalId")]
    public Hospital Hospital { get; set; }
    [JsonIgnore]
    [ForeignKey("SpecialityId")]
    public virtual Dictionary Speciality { get; set; }
    [JsonIgnore]
    [ForeignKey("DepartmentId")]
    public virtual Dictionary Department { get; set; }

    [JsonIgnore]
    [ForeignKey("RankId")]
    public virtual Dictionary Rank { get; set; }

    [JsonIgnore]
    [ForeignKey("PositionId")]
    public virtual Dictionary Position { get; set; }
    [JsonIgnore]
    public List<Attachment> AttachmentList { get; set; }
    [JsonIgnore]
    public List<DoctorCriterionFile> CriterionFileList { get; set; }

    [JsonIgnore]
    public User User { get; set; }
    #endregion

    public bool AcceptingNewTrial { get; set; }

    public bool ActivelyReading { get; set; }
    [MaxLength]
    public string? AdminComment { get; set; }

    public DateTime? AuditTime { get; set; }

    public Guid AuditUserId { get; set; }

    public string BlindName { get; set; } = null!;

    public string BlindNameCN { get; set; } = null!;
    [MaxLength]
    public string? BlindPublications { get; set; }

   
    public string ChineseName { get; set; } = null!;

    public int Code { get; set; }

    public ContractorStatusEnum CooperateStatus { get; set; } = ContractorStatusEnum.Noncooperation;

    public Guid? DepartmentId { get; set; }

   
    public string DepartmentOther { get; set; } = null!;

   
    public string DepartmentOtherCN { get; set; } = null!;

   
    public string EMail { get; set; } = null!;

   
    public string FirstName { get; set; } = null!;

    public int GCP { get; set; }

    public Guid GCPId { get; set; }

    public Guid? HospitalId { get; set; }

    public string HospitalOther { get; set; } = null!;

    public string HospitalOtherCN { get; set; } = null!;

    [MaxLength]
    public string Introduction { get; set; } = null!;

    public bool IsVirtual { get; set; }

    public DateTime? LastLoginTime { get; set; }

   
    public string LastName { get; set; } = null!;

    public int Nation { get; set; }

    public Guid OrganizationId { get; set; }
    [MaxLength]
    public string? OtherClinicalExperience { get; set; }
    [MaxLength]
    public string? OtherClinicalExperienceCN { get; set; }

   
    public string Password { get; set; } = null!;

   
    public string Phone { get; set; } = null!;

    public string PhotoPath { get; set; } = null!;

    public string Physician { get; set; } = null!;

    public string PhysicianCN { get; set; } = null!;

    public Guid? PhysicianId { get; set; }

    public Guid? PositionId { get; set; }

   
    public string PositionOther { get; set; } = null!;

   
    public string PositionOtherCN { get; set; } = null!;

    public Guid? RankId { get; set; }

   
    public string RankOther { get; set; } = null!;

   
    public string RankOtherCN { get; set; } = null!;

   
    public string ReadingTypeOther { get; set; } = null!;

   
    public string ReadingTypeOtherCN { get; set; } = null!;

    [StringLength(1000)]
    public string ResumePath { get; set; } = null!;

    public ResumeStatusEnum ResumeStatus { get; set; } = ResumeStatusEnum.Failed;

   
    public string ReviewerCode { get; set; } = null!;

    public ReviewerInformationConfirmStatus ReviewStatus { get; set; } = ReviewerInformationConfirmStatus.ConfirmRefuse;

    public int Sex { get; set; }

    public Guid? SpecialityId { get; set; }

   
    public string SpecialityOther { get; set; } = null!;

   
    public string SpecialityOtherCN { get; set; } = null!;

   
    public string SubspecialityOther { get; set; } = null!;

   
    public string SubspecialityOtherCN { get; set; } = null!;

   
    public string WeChat { get; set; } = null!;

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