using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.Application.Service.Reading.Dto
{
    public class CRCSignClinicalDataInDto
    {
        public Guid ReadingClinicalDataId { get; set; }
    }
    public class DeleteStudyClinicalInDto
    {
        public Guid StudyId { get; set; }
    }
    public class AddStudyClinicalInDto
    {
        public Guid StudyId { get; set; }
    }
    public class AutoAddClinicalInDto
    {
        public Guid? SubjectId { get; set; }
        //public Guid? VisitId { get; set; }
        public Guid TrialId { get; set; }
    }
    public class GetCRCSubjectClinicalInDto : PageInput
    {
        public Guid TrialId { get; set; }
        public Guid? SubjectId { get; set; }
        public string? SubjectCode { get; set; }
    }
    public class GetCRCSubjectClinicalOutDto
    {
        public Guid SubjectId { get; set; }
        public Guid ReadingClinicalDataId { get; set; }
        /// 
        /// 上传角色
        /// 
        public UploadRole UploadRole { get; set; }
        public Guid TrialId { get; set; }
        /// 
        /// 访视Id  或者模块Id
        /// 
        public Guid ReadingId { get; set; }
        /// 
        /// 临床级别
        /// 
        public ClinicalLevel ClinicalDataLevel { get; set; }
        public Guid? BaseLineVisitId { get; set; }
        /// 
        /// 上传方式
        /// 
        public ClinicalUploadType ClinicalUploadType { get; set; }
        public string SubjectCode { get; set; }
        public Guid ClinicalDataTrialSetId { get; set; }
        public string ClinicalDataSetName { get; set; }
        public string ClinicalDataSetEnName { get; set; }
        public int ClinicalCount { get; set; } = 0;
    }
    public class GetCRCSubjectClinicalResultDto
    {
        public Guid SubjectId { get; set; }
        public string SubjectCode { get; set; }
        public List ClinicalDataList { get; set; }
    }
    public class GetClinicalQuestionAnswerListInDto
    {
        public Guid SubjectId { get; set; }
        public Guid TrialId { get; set; }
        public Guid ClinicalDataTrialSetId { get; set; }
    }
    public class GetClinicalQuestionAnswerListOutDto
    {
        public List QuestionList { get; set; }
        public List> AnswerList { get; set; }
    }
    public class GetClinicalFormInfoInDto
    {
        public Guid ClinicalFormId { get; set; }
    }
    public class GetClinicalFormInfoOutDto
    {
        public List Question { get; set; }
    }
    public class ClinicalFormQuestionAnswer
    {
        public Guid QuestionId { get; set; }
        public string Answer { get; set; } = string.Empty;
    }
    public class ClinicalFormTableQuestionAnswer
    {
        public Guid TableQuestionId { get; set; }
        public int RowIndex { get; set; }
        public Guid QuestionId { get; set; }
        public string Answer { get; set; } = string.Empty;
    }
    public class GetPMConfirmListInDto : PageInput
    {
        public Guid TrialId { get; set; }
        public Guid TrialReadingCriterionId { get; set; }
    }
    public class GetCRCConfirmListInDto : PageInput
    {
        public bool? IsCRCConfirm { get; set; }
        public bool? IsPMConfirm { get; set; }
        public Guid? TrialReadingCriterionId { get; set; }
        public Guid? SubjectId { get; set; }
        public DateTime? StartTime { get; set; }
        public DateTime? EndTime { get; set; }
        public Guid TrialId { get; set; }
        public Guid? ReadModuleId { get; set; }
        public string? SubjectCode { get; set; }
    }
    public class CRCCancelConfirmClinicalInDto
    {
        public Guid TrialId { get; set; }
        public Guid ReadModuleId { get; set; }
    }
    public class GetClinicalDateListOutDto
    {
        public string ClinicalDataSetName { get; set; }
        public List DateList { get; set; }
    }
    public class GetCRCBeConfirmListInDto
    {
        public Guid TrialId { get; set; }
        public Guid ReadModuleId { get; set; }
    }
    public class GetClinicalTableListInDto
    {
        public Guid TrialId { get; set; }
        public Guid ReadModuleId { get; set; }
    }
    public class GetClinicalTableListOutDto : GetClinicalQuestionAnswerListOutDto
    {
        public string ClinicalDataSetName { get; set; }
        /// 
        /// 模块名称
        /// 
        public string ModuleName { get; set; }
    }
    public class GetCRCBeConfirm : GetCRCBeConfirmListOutDto
    {
        public Guid ReadModuleId { get; set; }
    }
    public class GetCRCBeConfirmListOutDto
    {
        public Guid ClinicalDataTrialSetId { get; set; }
        public Guid ClinicalFormId { get; set; }
        public string ClinicalDataSetName { get; set; }
        public string ClinicalDataSetEnName { get; set; }
        public DateTime CheckDate { get; set; }
        public bool IsHaveTableQuestion { get; set; }
    }
    public class CRCConfirmClinicalInDto
    {
        public Guid TrialId { get; set; }
        public Guid SubjectId { get; set; }
        public Guid ReadModuleId { get; set; }
        /// 
        /// 临床数据是否完整
        /// 
        public bool? IsClinicalDataComplete { get; set; }
        /// 
        /// 临床数据是否盲化
        /// 
        public bool? IsClinicalDataBlind { get; set; }
        public bool IsConfirm { get; set; }
    }
    public class CRCClinicalForm
    {
        /// 
        /// 受试者Id
        /// 
        public Guid SubjectId { get; set; }
        public DateTime? CheckDate { get; set; }
        public Guid ClinicalFormId { get; set; }
        /// 
        /// 临床级别
        /// 
        public ClinicalLevel ClinicalDataLevel { get; set; }
        public Guid ClinicalDataTrialSetId { get; set; }
        public string ClinicalDataSetName { get; set; }
        public bool IsHaveTableQuestion { get; set; }
        public string ClinicalDataSetEnName { get; set; }
    }
    public class GetCRCConfirmListOutDto
    {
        /// 
        /// 受试者ID
        /// 
        public Guid SubjectId { get; set; }
        public bool IsNotNeedPMConfirm { get; set; } = false;
        public Guid ReadModuleId { get; set; }
        /// 
        /// 模块名称
        /// 
        public string ModuleName { get; set; }
        public string VisitBlindName { get; set; }
        public bool IsPMConfirm { get; set; }
        public ReadingSetType ReadingSetType { get; set; }
        public bool IsCRCConfirm { get; set; } = false;
        /// 
        /// CRC是否正在申请撤回
        /// 
        public bool IsCRCApplicationRevoke { get; set; } = false;
        public string SubjectCode { get; set; }
        public bool IsHaveTableQuestion
        {
            get
            {
                return ClinicalFormList.Any(x => x.IsHaveTableQuestion);
            }
        }
        /// 
        /// 最晚拍片日期
        /// 
        public DateTime? LatestScanDate { get; set; }
        public List ClinicalNameList
        {
            get
            {
                return this.ClinicalFormList.Select(x => x.ClinicalDataSetName).Distinct().ToList();
            }
        }
        public List ClinicalFormList { get; set; }
        public int FormCount
        {
            get
            {
                return this.ClinicalFormList.Count();
            }
        }
    }
    public class DeleteClinicalFormInDto
    {
        public Guid ClinicalFormId { get; set; }
    }
    public class SubmitClinicalFormInDto
    {
        /// 
        /// VisitId
        /// 
        public Guid? ReadingId { get; set; }
        public Guid? ClinicalFormId { get; set; }
        public string? PicturePath { get; set; }
        public Guid SubjectId { get; set; }
        public Guid TrialId { get; set; }
        public Guid ClinicalDataTrialSetId { get; set; }
        public List QuestionAnswers { get; set; }
        public List TableQuestionAnswerList { get; set; }
    }
    public class ClinicalQuestionForm
    {
        public Guid QuestionId { get; set; }
        public List> TableQuestionAnswers { get; set; }
    }
    public class ClinicalTableQuestionForm
    {
        public Guid TableQuestionId { get; set; }
        public string Answer { get; set; } = string.Empty;
    }
}