using IRaCIS.Core.Domain.Share;

namespace IRaCIS.Core.Domain.Models;

[Comment("项目 - 受试者")]
[Table("Subject")]
public class Subject : BaseFullDeleteAuditEntity
{
    #region 导航属性
    [JsonIgnore]
    public List<TaskStudy> TaskStudyList { get; set; } = new List<TaskStudy>();

    [JsonIgnore]
    public List<SubjectVisit> SubjectVisitList { get; set; } = new List<SubjectVisit>();
    [JsonIgnore]
    public List<SubjectUser> SubjectDoctorList { get; set; } = new List<SubjectUser>();
    [JsonIgnore]
    public List<VisitTask> SubjectVisitTaskList { get; set; } = new List<VisitTask>();
    [JsonIgnore]
    public List<ReadModule> ReadModuleList { get; set; }
    [JsonIgnore]
    public List<SubjectCanceDoctor> SubjectCanceDoctorList { get; set; }

    [JsonIgnore]
    public List<ReadingClinicalData> ClinicalDataList { get; set; }

    [JsonIgnore]
    public List<SubjectCriteriaEvaluation> SubjectCriteriaEvaluationList { get; set; }
    [JsonIgnore]
    public List<SubjectCriteriaEvaluationVisitFilter> SubjectCriteriaEvaluationVisitFilterList { get; set; }

    [JsonIgnore]

    public List<SubjectAdditionalEvaluationResult> SubjectAdditionalEvaluationResult { get; set; }
    [JsonIgnore]
    public List<ReadingTaskQuestionAnswer> ReadingTaskQuestionAnswerList { get; set; }

    [JsonIgnore]
    [ForeignKey("FinalSubjectVisitId")]
    public SubjectVisit FinalSubjectVisit { get; set; }
    [JsonIgnore]
    [ForeignKey("TrialId")]
    public Trial Trial { get; set; }
    [JsonIgnore]
    public TrialSite TrialSite { get; set; }
    [JsonIgnore]
    public List<DicomStudy> StudyList { get; set; } = new List<DicomStudy>();
    [JsonIgnore]
    [ForeignKey("LatestSubjectVisitId")]
    public SubjectVisit LatestSubjectVisit { get; set; }
    [JsonIgnore]
    public List<ClinicalForm> ClinicalFormList { get; set; }
    #endregion
    public Guid TrialId { get; set; }
    public Guid TrialSiteId { get; set; }

    public string Code { get; set; } = string.Empty;
    public string FirstName { get; set; } = string.Empty;
    public string LastName { get; set; } = string.Empty;
    public int? Age { get; set; }
    public string Sex { get; set; } = string.Empty;

    public Guid? LatestSubjectVisitId { get; set; }

    public Guid? FinalSubjectVisitId { get; set; }

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

    [Comment("1 访视中,2 出组  3 访视结束")]
    public SubjectStatus Status { get; set; } = SubjectStatus.OnVisit;
    public string Reason { get; set; } = string.Empty;
    public bool IsEnrollment { get; set; }

    public DateTime? OutEnrollmentTime { get; set; }

    public DateTime? VisitOverTime { get; set; }

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

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

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

    public DateTime? BirthDate { get; set; }

    [Comment("知情同意书签署日期")]
    public DateTime? SignDate { get; set; }

    public DateTime? FirstGiveMedicineTime { get; set; }

    public bool IsUrgent { get; set; }

    [Comment("重阅或者退回影响一致性分析")]
    public bool IsReReadingOrBackInfluenceAnalysis { get; set; }

    [Comment("受试者退出")]
    public bool IsSubjectQuit { get; set; }
}