using IRaCIS.Core.Domain.Share;
using Newtonsoft.Json;
using System.ComponentModel.DataAnnotations;
namespace IRaCIS.Core.Application.Service.Reading.Dto
{
    public class GetReadModuleDto : PageInput
    {
        public Guid? TrialId { get; set; }
        public Guid? SubjectId { get; set; }
        public CompleteClinicalDataEnum? CompleteClinicalData { get; set; }
        /// 
        /// 项目中心Code
        /// 
        public string? TrialSiteCode { get; set; }
        /// 
        /// 受试者Code
        /// 
        public string? SubjectCode { get; set; }
        /// 
        /// 模块类型
        /// 
        public ModuleTypeEnum? ModuleType { get; set; }
        /// 
        /// 状态
        /// 
        public ReadingStatusEnum? ReadingStatus { get; set; }
        /// 
        /// 任务名称
        /// 
        public string? Name { get; set; }
        [NotDefault]
        public Guid TrialReadingCriterionId { get; set; }
    }
    public class GetSubjectReadVisitsOutDto
    {
        public Guid SubjectVisitId { get; set; }
        public decimal VisitNum { get; set; }
        public string VisitName { get; set; }
    }
    public class GetCanChangeReadVisitListInDto
    {
        /// 
        /// 受试者ID
        /// 
        public Guid SubjectId { get; set; }
        [NotDefault]
        public Guid TrialReadingCriterionId { get; set; }
        /// 
        /// 阅片配置的类型
        /// 
        public ReadingSetType ReadingSetType { get; set; }
        public Guid Id { get; set; }
    }
    public class ChangeCutOffVisitInDto
    {
        [NotDefault]
        public Guid Id { get; set; }
        public Guid SubjectVisitIdId { get; set; }
        /// 
		/// 模块名称
		/// 
		public string Name { get; set; }
    }
    public class GetSubjectReadVisitsInDto
    {
        /// 
        /// 阅片配置的类型
        /// 
        public ReadingSetType ReadingSetType { get; set; }
        /// 
        /// 受试者ID
        /// 
        public Guid SubjectId { get; set; }
        [NotDefault]
        public Guid TrialReadingCriterionId { get; set; }
    }
    public class ReadModuleAddDto
    {
        public Guid TrialId { get; set; }
        /// 
        /// 截止日期
        /// 
        public DateTime? ExpirationDate { get; set; }
        /// 
        /// 截止访视
        /// 
        public decimal? ExpirationVisitNum { get; set; }
        /// 
        /// 访视计划ID
        /// 
        public Guid? VisitStageId { get; set; }
        /// 
        /// 受试者ID
        /// 
        public Guid SubjectId { get; set; }
        /// 
        /// 名称
        /// 
        public string Name { get; set; }
        /// 
        /// 阅片配置的类型
        /// 
        public ReadingSetType ReadingSetType { get; set; }
        [NotDefault]
        public Guid TrialReadingCriterionId { get; set; }
    }
    public class ReadModuleAddOrEdit : ReadModule
    {
        public new Guid? Id { get; set; }
    }
    public class VisitFinishReadingAddReadModuleInDto
    {
        /// 
        /// 项目ID
        /// 
        public Guid TrialId { get; set; }
        /// 
        /// 受试者Id
        /// 
        public Guid SubjectId { get; set; }
        /// 
        /// 访视Id
        /// 
        public Guid SubjectVisitId { get; set; }
    }
    public class GetReadModuleSingleIndto
    {
        public Guid Id { get; set; }
        public Guid SubjectId { get; set; }
        public Guid TrialId { get; set; }
        [NotDefault]
        public Guid TrialReadingCriterionId { get; set; }
    }
    public class GetReadModuleSingleOutdto
    {
        public Guid Id { get; set; }
        /// 
        /// 模块类型
        /// 
        public ModuleTypeEnum ModuleType { get; set; }
        /// 
        /// 访视ID
        /// 
        public Guid? SubjectVisitId { get; set; }
        /// 
        /// 访视名称
        /// 
        public string SubjectVisitName { get; set; }
        /// 
        /// 干系人Id
        /// 
        public List StakeholderIds { get; set; }
        /// 
        /// 干系人姓名
        /// 
        public List StakeholderNames { get; set; }
        /// 
        /// 状态
        /// 
        public ReadingStatusEnum Status { get; set; }
    }
    public class GetReadModuleResultDto
    {
        /// 
        /// 当前页索引
        /// 
        public int PageIndex { get; set; }
        /// 
        /// 每页的记录条数
        /// 
        public int PageSize { get; set; }
        /// 
        /// 数据总数
        /// 
        public long TotalCount { get; set; } = 0;
        /// 
        /// 最大长度
        /// 
        public int MaxLength { get; set; }
        /// 
        /// 数据
        /// 
        public List CurrentPageData { get; set; }
    }
    //public class GetReadModuleDtoOut
    public class GetReadModuleDtoOut
    {
        public string? SubjectCode { get; set; }
        public string? TrialSiteCode { get; set; }
        public Guid? TrialSiteId { get; set; }
        public Guid? SubjectId { get; set; }
        public List Data { get; set; } = new List();
        //public List Data => VisitData.Union(ReadMouduleData).ToList();
        [JsonIgnore]
        public List VisitData { get; set; } = new List();
        [JsonIgnore]
        public List ReadMouduleData { get; set; } = new List();
    }
    public class ReadPlanView
    {
        public string SubjectCode { get; set; }
        public string TrialSiteCode { get; set; }
        public string SiteCode { get; set; }
        public Guid TrialSiteId { get; set; }
        public Guid SubjectId { get; set; }
        public List SubjectVisitPlanList { get; set; }
        public List ReadMoudlePlanList { get; set; }
    }
    public class ReadMoudleView
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public Guid SubjectId { get; set; }
        public ModuleTypeEnum ModuleType { get; set; }
        public bool? IsUrgent { get; set; }
        public Guid SubjectVisitId { get; set; }
        public string SubjectVisitName { get; set; }
        public Guid? CutOffVisitId { get; set; }
        public string? CutOffVisitName { get; set; }
        public Guid? ReadModuleId { get; set; }
        public string? ReadModuleName { get; set; }
        public DateTime CreateTime { get; set; }
        public bool IsVisit { get; set; }
    }
    public class SubjectVisitPlanView
    {
        /// 
        /// Id(阅片期Id 或者 访视ID)
        /// 
        public Guid Id { get; set; }
        public string Name { get; set; }
        public Guid SubjectId { get; set; }
        public ModuleTypeEnum ModuleType { get; set; }
        public bool? IsUrgent { get; set; }
        public Guid SubjectVisitId { get; set; }
        public string SubjectVisitName { get; set; }
        public DateTime CreateTime { get; set; }
        public bool IsFinalVisit { get; set; } = false;
        public Guid? OutPlanPreviousVisitId { get; set; }
        public string OutPlanPreviousVisitName { get; set; }
        public Guid? TrialSiteId { get; set; }
        public bool IsVisit { get; set; } = true;
        public decimal? VisitNum { get; set; }
        public PDStateEnum PDState { get; set; }
        public bool IsEnrollmentConfirm { get; set; } = false;
    }
}