using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace IRaCIS.Core.Domain.Models
{
    public class TaskStudy : Entity, IAuditUpdate, IAuditAdd, ISoftDelete
    {

        [JsonIgnore]
        [ForeignKey("VisitTaskId")]
        public VisitTask VisitTask { get; set; }

        [JsonIgnore]
        public List<StudyMonitor> DicomStudyMonitorList { get; set; } = new List<StudyMonitor>();

        [JsonIgnore]
        public List<TaskInstance> InstanceList { get; set; }

        [JsonIgnore]
        public List<TaskSeries> SeriesList { get; set; }


        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid SeqId { get; set; }

        public Guid TrialId { get; set; }


        public Guid SubjectId { get; set; }


        public Guid VisitTaskId { get; set; }

        public int Code { get; set; } = 0;

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

        public string StudyInstanceUid { get; set; } = string.Empty;
        public DateTime? StudyTime { get; set; }
        public string Modalities { get; set; } = string.Empty;

        public string Description { get; set; } = string.Empty;
        public int SeriesCount { get; set; } = 0;
        public int InstanceCount { get; set; } = 0;


        public string InstitutionName { get; set; } = string.Empty;
        public string PatientId { get; set; } = string.Empty;
        public string PatientName { get; set; } = string.Empty;
        public string PatientAge { get; set; } = string.Empty;
        public string PatientSex { get; set; } = string.Empty;

        public string StudyId { get; set; } = string.Empty;
        public string AccessionNumber { get; set; } = string.Empty;
        public string PatientBirthDate { get; set; } = string.Empty;
        public string AcquisitionTime { get; set; } = string.Empty;
        public string AcquisitionNumber { get; set; } = string.Empty;
        public string TriggerTime { get; set; } = string.Empty;

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

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

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



        //0 未知  1 单重  2 双重
        public bool IsDoubleReview { get; set; }

        [JsonIgnore]
        [ForeignKey("SubjectId")]
        public Subject Subject { get; set; }

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

        [JsonIgnore]
        [ForeignKey("CreateUserId")]
        public User Uploader { get; set; }


		//软删除
		public bool IsDeleted { get; set; }

        public DateTime? DeletedTime { get; set; }

        public Guid? DeleteUserId { get; set; }


    }
}