using IRaCIS.Core.Domain.Share;
using MassTransit;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IRaCIS.Core.Application.Service.Reading.Dto
{
    #region 阅片问题


    public class ReadingReportDto
    {
        public Guid Id
        {
            get
            {
                return Guid.NewGuid();
            }
        }

        /// <summary>
        /// 限制编辑
        /// </summary>
        public LimitEdit LimitEdit { get; set; } = LimitEdit.None;

        /// <summary>
		/// 最大答案长度
		/// </summary>
		public int? MaxAnswerLength { get; set; }

        /// <summary>
		/// 文件类型
		/// </summary>
		public string? FileType { get; set; }
        public Guid QuestionId { get; set; }

        public Guid TableQuestionId { get; set; }

        public Guid? GroupId { get; set; }

        public int ShowOrder { get; set; }


        /// <summary>
        /// 是否显示在Dicom阅片中
        /// </summary>
        public bool IsShowInDicom { get; set; } = false;

        public decimal RowIndex { get; set; }

        /// <summary>
		/// 问题类型
		/// </summary>
		public TableQuestionType? QuestionGenre { get; set; }

        /// <summary>
        /// 问题类型
        /// </summary>
        public TableQuestionType? TableQuestionType { get; set; }

        /// <summary>
        /// 字典code
        /// </summary>
        public string DictionaryCode { get; set; }

        /// <summary>
		/// 问题类型
		/// </summary>
		public QuestionType? QuestionType { get; set; }

        /// <summary>
        /// 数据来源
        /// </summary>
        public DataSources DataSource { get; set; } = DataSources.ManualEntry;


        /// <summary>
		/// 病灶类型
		/// </summary>
		public LesionType? LesionType { get; set; }

        public string GroupName { get; set; }

        public string QuestionName { get; set; }

        public bool IsCanEditPosition { get; set; } = false;

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

        public Guid? RowId { get; set; }

        public string SplitOrMergeLesionName { get; set; }

        public SplitOrMergeType? SplitOrMergeType { get; set; }

        /// <summary>
        /// 类型
        /// </summary>
        public string Type { get; set; }

        /// <summary>
        /// 问题标识
        /// </summary>
        public QuestionMark? QuestionMark { get; set; }



        /// <summary>
        /// 类型值
        /// </summary>
        public string TypeValue { get; set; }

        /// <summary>
        /// 序号标记
        /// </summary>
        public string OrderMark { get; set; } = string.Empty;

        /// <summary>
		/// 数值类型
		/// </summary>
		public ValueOfType? ValueType { get; set; }

        /// <summary>
		/// 自定义单位
		/// </summary>
		public string CustomUnit { get; set; } = string.Empty;

        /// <summary>
        /// 单位
        /// </summary>
        public ValueUnit? Unit { get; set; }

        public decimal FristAddTaskNum { get; set; }

        public ReportLayType ReportLayType { get; set; } = ReportLayType.Group;
      

        /// <summary>
        /// 问题英文分组
        /// </summary>
        public string GroupEnName { get; set; } = string.Empty;

        public List<TaskQuestionAnswer> Answer { get; set; } = new List<TaskQuestionAnswer>();

        public List<ReadingReportDto> Childrens { get; set; } = new List<ReadingReportDto>();
    }


    public class TaskQuestionAnswer
    {
        public string TaskName { get; set; }

        public Guid VisitTaskId { get; set; }

        public string Answer { get; set; }

        public bool IsGlobalChange { get; set; } = false;

        /// <summary>
		/// 全局阅片修改的答案
		/// </summary>
		public string GlobalChangeAnswer { get; set; } = string.Empty;


    }


    public class GetReadingReportEvaluationOutDto
    {

        public  object ReportCalculateResult{ get; set; }
        
        public object CalculateResult { get; set; }
        public ReadingTaskState ReadingTaskState { get; set; }

        public List<VisitTaskInfo> VisitTaskList { get; set; }

        public List<ReadingReportDto> TaskQuestions { get; set; }
    }

    public class VisitTaskGroupAnswerDto
    {
        public Guid VisitTaskId { get; set; }

        public List<VisitTaskGroupInfo> Questions { get; set; }

    }

    public class VisitTaskGroupInfo
    {
        public Guid QuestionId { get; set; }

        public string QuestionName { get; set; }

        public string GroupName { get; set; }

        public int ShowOrder { get; set; }

     

        public List<VisitTaskQuestionInfo> QuestionList = new List<VisitTaskQuestionInfo>();
    }


    public class VisitTaskQuestionInfo
    {
        public Guid QuestionId { get; set; }


        public string QuestionName { get; set; }

        public string GroupName { get; set; }

        public int ShowOrder { get; set; }

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

        public List<VistTaskTableQuestionRowInfo> TableRowQuestionList = new List<VistTaskTableQuestionRowInfo>();
    }


    public class VistTaskTableQuestionRowInfo
    {
        public decimal RowIndex { get; set; }

        /// <summary>
        /// 序号标记
        /// </summary>
        public string OrderMark { get; set; } = string.Empty;


        public List<VistTaskTableQuestionInfo> TableQuestionList = new List<VistTaskTableQuestionInfo>();
    }


    public class VistTaskTableQuestionInfo
    {
        public Guid QuestionId { get; set; }

        public Guid TableQuestionId { get; set; }

        public string QuestionName { get; set; }

   

        public int ShowOrder { get; set; }

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



    public class VisitTaskInfo
    {
        public Guid VisitTaskId { get; set; }

        public string BlindName { get; set; }

        public bool IsBaseLine { get; set; }

        public DateTime? LatestScanDate { get; set; }

        public string TaskName { get; set; }

        public decimal VisitTaskNum { get; set; }

        public bool IsCurrentTask { get; set; }
    }

    public class MergeLesionInDto
    {
        public Guid VisitTaskId { get; set; }

        public Guid QuestionId { get; set; }

        public Guid MainRowId { get; set; }

        public Guid MergeRowId { get; set; }


    }

    public class SplitLesionInDto
    {
        public Guid VisitTaskId { get; set; }

        public Guid QuestionId { get; set; }

        public Guid RowId { get; set; }
    }

    public class ChangeCalculationAnswerInDto
    {
        public Guid VisitTaskId { get; set; }

        public List<ChangeQuestion> QuestionAnswer { get; set; } = new List<ChangeQuestion>();

        public List<ChangeTableQuestion> TableQuestionAnswer { get; set; } = new List<ChangeTableQuestion>();
    }

    public class ChangeTableQuestion
    {
        public Guid RowId { get; set; }

        public Guid QuestionId { get; set; }

        public Guid TableQuestionId { get; set; }

        public string Answer { get; set; }
    }

    public class ChangeQuestion
    {
        public Guid QuestionId { get; set; }

        public string Answer { get; set; }
    }



    public class ReadClinicalDataInDto
    {
        [NotDefault]
        public Guid VisitTaskId { get; set; }
    }

    public class GetReadingToolInDto
    {
        public Guid VisitTaskId { get; set; }

    }

    public class GetReadingToolOutDto
    {
        public ReadingTool? ReadingTool { get; set; }

        public Guid TrialReadingCriterionId { get; set; }

        public CriterionType CriterionType { get; set; }

    }
    public class ChangeDicomReadingQuestionAnswerInDto
    {
        public Guid VisitTaskId { get; set; }

        public List<ChangeDicomReadingQuestionAnswerDto> Answers { get; set; }
    }


    public class ChangeDicomReadingQuestionAnswerDto
    {
        public Guid Id { get; set; }

        public string Answer { get; set; }
    }
    public class DicomReadingQuestionAnswer : ReadingQuestionTrial
    {
        public string Answer { get; set; }

        public List<DicomReadingQuestionAnswer> Childrens = new List<DicomReadingQuestionAnswer>();
    }

    public class DeleteReadingRowAnswerInDto
    {
        public Guid VisitTaskId { get; set; }

        public Guid QuestionId { get; set; }

        public Guid RowId { get; set; }
    }

    public class GetDicomReadingQuestionAnswerInDto
    {
        public Guid VisitTaskId { get; set; }

        public Guid TrialId { get; set; }
    }

    public class ReadingTableAnswerRowInfoBase
    {
        public Guid Id { get; set; }

        /// <summary>
        /// 第一层的Question
        /// </summary>
        public Guid QuestionId { get; set; }

        /// <summary>
		/// 器官Id
		/// </summary>
		public Guid? OrganInfoId { get; set; }

        /// <summary>
        /// VisitTaskId
        /// </summary>
        public Guid VisitTaskId { get; set; }

        /// <summary>
        /// TrialId
        /// </summary>
        public Guid TrialId { get; set; }

        /// <summary>
		/// 首次添加任务ID
		/// </summary>
		public Guid FristAddTaskId { get; set; }

        /// <summary>
        /// 窗宽WW
        /// </summary>
        public decimal? WW { get; set; }

        /// <summary>
        /// 窗位WL
        /// </summary>
        public decimal? WL { get; set; }


        /// <summary>
        /// InstanceId
        /// </summary>
        public Guid? InstanceId { get; set; }

        /// <summary>
        /// SeriesId
        /// </summary>
        public Guid? SeriesId { get; set; }


        /// <summary>
        /// StudyId
        /// </summary>
        public Guid? StudyId { get; set; }

        public bool IsCanEditPosition { get; set; } = false;


        /// <summary>
        /// 是Dicom阅片
        /// </summary>
        public bool IsDicomReading { get; set; } = true;

        /// <summary>
        /// RowIndex
        /// </summary>
        public decimal RowIndex { get; set; }

        /// <summary>
        /// MeasureData
        /// </summary>
        public string MeasureData { get; set; } = string.Empty;

        /// <summary>
        /// CreateTime
        /// </summary>
        public DateTime CreateTime { get; set; }

        /// <summary>
        /// 是否是当前任务添加
        /// </summary>
        public bool IsCurrentTaskAdd { get; set; } = false;


        /// <summary>
        /// SplitRowId
        /// </summary>
        public Guid? SplitRowId { get; set; }


        /// <summary>
        /// MergeRowId
        /// </summary>
        public Guid? MergeRowId { get; set; }

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

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

        /// <summary>
        /// 截图地址
        /// </summary>
        public string PicturePath { get; set; } = string.Empty;

        /// <summary>
        /// 第一次添加的任务ID
        /// </summary>
        public decimal FristAddTaskNum { get; set; } = 0;


        public SplitOrMergeType? SplitOrMergeType { get; set; }

        /// <summary>
        /// CreateUserId
        /// </summary>
        public Guid CreateUserId { get; set; }


        public int? NumberOfFrames { get; set; }

        public Guid UpdateUserId { get; set; }
        //string UpdateUserName { get; set; }
        public DateTime UpdateTime { get; set; }




        public bool IsDeleted { get; set; }

        public DateTime? DeletedTime { get; set; }

        public Guid? DeleteUserId { get; set; }




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

    public class CopyTableAnswerRowInfo : ReadingTableAnswerRowInfoBase
    {
        public Guid OriginalId { get; set; }
    }
    public class CopyTableAnswerDto
    {
        public decimal RowIndex { get; set; }

        /// <summary>
        /// 问题标识
        /// </summary>
        public QuestionMark? QuestionMark { get; set; }

        public bool IsCopy { get; set; }


        /// <summary>
        /// 问题Id
        /// </summary>

        public Guid QuestionId { get; set; }


        public Guid RowId { get; set; }

        /// <summary>
        /// 表格问题Id
        /// </summary>
        public Guid TableQuestionId { get; set; }

        /// <summary>
        /// 项目Id
        /// </summary>
        public Guid TrialId { get; set; }

        public string Answer { get; set; }
    }
    public class GetReadingReportEvaluationInDto
    {
        public Guid VisitTaskId { get; set; }

        public Guid TrialId { get; set; }

        public bool IsCalculate { get; set; } = true;
    }

    public class GetReadingQuestionAndAnswerOutDto: GetReadingTableQuestionOutDto
    {

        public bool IsBaseLineTask { get; set; }

        public decimal TaskNum { get; set; }

        /// <summary>
        /// 任务盲态名称 和检查批次盲态一样
        /// </summary>
        public string BlindName { get; set; }

        public ReadingTaskState ReadingTaskState { get; set; }

     
    }

    public class GetCustomTableQuestionAnswerInDto
    {
        [NotDefault]
        public Guid VisitTaskId { get; set; }
    }

    public class GetReadingTableQuestionOutDto
    {
        public List<TrialReadQuestionData> SinglePage { get; set; }

        public List<TrialReadQuestionData> MultiPage { get; set; }

        public List<TrialReadQuestionData> PublicPage { get; set; }
    }


    public class TrialReadQuestionData : ReadingQuestionTrial
    {

        public bool IsPage { get; set; } = false;

        public string Answer { get; set; }

        /// <summary>
        /// 分页名称
        /// </summary>
        public string PageName { get; set; }

        /// <summary>
        /// 是否公共分页
        /// </summary>
        public bool? IsPublicPage { get; set; } = false;

        public int? PageShowOrder { get; set; }

      

        public List<TrialReadQuestionData> Childrens { get; set; }

        public TrialReadTableQuestion TableQuestions { get; set; }


    }

    /// <summary>
    /// 病灶Index
    /// </summary>
    public class lesionsIndexDto
    {
    

        public Guid QuestionId { get; set; }

        public List<decimal> Rowindexs { get; set; }
    }

    public class TableAnsweRowInfo : ReadingTableAnswerRowInfo
    {
        public string SplitName { get; set; }

        public string MergeName { get; set; }

        /// <summary>
        /// 病灶类型
        /// </summary>
        public LesionType? LesionType { get; set; }
    }

    public class GetReadingTableQuestionOrAnswerInDto
    {
        public Guid TrialReadingCriterionId { get; set; }
        public Guid? TaskId { get; set; }
        public List<ReadingTableQuestionAnswerInfo> TableAnswers { get; set; } = new List<ReadingTableQuestionAnswerInfo>();

        public List<TableAnsweRowInfo> TableAnsweRowInfos { get; set; } = new List<TableAnsweRowInfo>();

        public List<OrganInfo> OrganInfos { get; set; } = new List<OrganInfo>();

        public bool IsGetallQuestion { get; set; } = false;

        /// <summary>
        /// 是否获取预览
        /// </summary>
        public bool IsGetPreview { get; set; } = false;
    }
    public class ReadingTableQuestionAnswerInfo : ReadingTableQuestionAnswer
    {
        public int ShowOrder { get; set; }

        /// <summary>
        /// 问题标识
        /// </summary>
        public QuestionMark? QuestionMark { get; set; }
    }

    public class TrialReadTableQuestion
    {
        public List<TableQuestionTrial> Questions { get; set; }

        public List<Dictionary<string,string>> Answers { get; set; }
    }


    public class TableQuestionTrial:ReadingTableQuestionTrial
    {
        public List<GetTrialReadingQuestionOutDto> RelationQuestions { get; set; } = new List<GetTrialReadingQuestionOutDto>();
    }


    public class GetTableAnswerRowInfoOutDto
    {
        public Guid Id { get; set; }

        /// <summary>
        /// 序号标记
        /// </summary>
        public string OrderMark { get; set; } = string.Empty;

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


        /// <summary>
        /// 截图地址
        /// </summary>
        public string PicturePath { get; set; } = string.Empty;

        public int? NumberOfFrames { get; set; }
        public Guid RowId { get; set; }

        /// <summary>
        /// QuestionId
        /// </summary>
		public Guid QuestionId { get; set; }

        /// <summary>
        /// VisitTaskId
        /// </summary>
        public Guid VisitTaskId { get; set; }

        /// <summary>
        /// TrialId
        /// </summary>
        public Guid TrialId { get; set; }


        /// <summary>
        /// InstanceId
        /// </summary>
        public Guid? InstanceId { get; set; }

        /// <summary>
        /// SeriesId
        /// </summary>
        public Guid? SeriesId { get; set; }


        /// <summary>
        /// StudyId
        /// </summary>
        public Guid? StudyId { get; set; }

        public bool  IsCanEditPosition { get; set; }

        /// <summary>
        /// RowIndex
        /// </summary>
        public string RowIndex { get; set; }

        /// <summary>
        /// RowIndex
        /// </summary>
        public decimal RowIndexNum { get; set; }


        /// <summary>
        /// 是Dicom阅片
        /// </summary>
        public bool IsDicomReading { get; set; } = true;

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


        /// <summary>
        /// 首次添加任务ID
        /// </summary>
        public Guid FristAddTaskId { get; set; }

        /// <summary>
        /// 窗宽WW
        /// </summary>
        public decimal? WW { get; set; }

        /// <summary>
        /// 窗位WL
        /// </summary>
        public decimal? WL { get; set; }

        /// <summary>
        /// MeasureData
        /// </summary>
        public string MeasureData { get; set; }

        public int ShowOrder { get; set; }

    }

    public class GetTableAnswerRowInfoInDto
    {
        public Guid VisitTaskId { get; set; }

        public Guid? QuestionId { get; set; }
    }
    public class GetReadingQuestionAndAnswerInDto
    {

        public Guid TrialId { get; set; }

        public Guid VisitTaskId { get; set; }
    }

    #endregion
    public class GetHistoryGlobalInfoOutDto
    {
        public Guid VisitTaskId { get; set; }

        public string TaskName { get; set; }

        public ReadingTaskState ReadingTaskState { get; set; }

        public decimal VisitTaskNum { get; set; }
    }

    public class GetHistoryGlobalInfoInDto
    {
        public Guid VisitTaskId { get; set; }
    }


    public class SubmitOncologyReadingInfoInDto
    {
        public Guid OncologyTaskId { get; set; }
    }

    public class SubmitGlobalReadingInfoInDto
    {
        public Guid GlobalTaskId { get; set; }
    }

    public class SetOncologyQuestion
    {
        public Guid VisitTaskId { get; set; }

        /// <summary>
        /// 评估结果
        /// </summary>
        public string EvaluationResult { get; set; } = string.Empty;

        /// <summary>
        /// 评估原因
        /// </summary>
        public string EvaluationReason { get; set; } = string.Empty;
    }

    public class SetOncologyReadingInfoInDto
    {
        public Guid OncologyTaskId { get; set; }

        public List<SetOncologyQuestion> OncologyQuestionList { get; set; }
    }

    public class BatchSubmitGlobalReadingInfo
    {
        public Guid GlobalTaskId { get; set; }

        public Guid SubjectId { get; set; }

        public Guid TrialId { get; set; }

        public List<SubmitGlobalReading> VisitTaskAnswerList { get; set; }

    }


    public class SubmitGlobalReading
    {
        public Guid VisitTaskId { get; set; }

        public  List<GlobalAnswer> AnswerList { get; set; }
    }

    public class GlobalAnswer
    {
        public Guid? QuestionId { get; set; }

       

        public GlobalAnswerType GlobalAnswerType { get; set; }

        public string Answer { get; set; }
    }

    public class SaveGlobalReadingInfoInDto
    {
        public Guid GlobalTaskId { get; set; }

        public Guid SubjectId { get; set; }

        public Guid TrialId { get; set; }

        public List<SaveGlobalReadingQuestion> QuestionList { get; set; }

    }


    public class SaveGlobalReadingQuestion
    {
        public Guid? QuestionId { get; set; }

        public Guid VisitTaskId { get; set; }

        public GlobalAnswerType GlobalAnswerType { get; set; }

        public string Answer { get; set; }
    }


    public class OncologyQuestion
    {
        public Guid QuestionId { get; set; }

        public string QuestionName { get; set; }

        public string Answer { get; set; }


        /// <summary>
        /// 问题类型
        /// </summary>
        public TableQuestionType? QuestionGenre { get; set; }


        /// <summary>
        /// 字典code
        /// </summary>
        public string DictionaryCode { get; set; }

    }

    public class OncologyVisitTaskInfo
    {
        public Guid VisitTaskId { get; set; }

        public string VisitName { get; set; }

        public bool IsHaveChange { get; set; }

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

        /// <summary>
        /// 评估结果
        /// </summary>
        public string EvaluationResult { get; set; } = string.Empty;

        /// <summary>
        /// 评估原因
        /// </summary>
        public string EvaluationReason { get; set; } = string.Empty;


        public List<OncologyQuestion> QuestionList { get; set; } = new List<OncologyQuestion>();

    }

    public class GetOncologyReadingInfoOutDto
    {
        public Guid OncologyTaskId { get; set; }

        ///// <summary>
        ///// 评估结果
        ///// </summary>
        //public string TrialEvaluationResult { get; set; } = string.Empty;

        /// <summary>
        /// 评估原因
        /// </summary>
        public string TrialEvaluationReason { get; set; } = string.Empty;


        /// <summary>
        /// 是否显示详情
        /// </summary>
        public bool IsShowDetail { get; set; }

        //任务阅片状态
        public ReadingTaskState ReadingTaskState { get; set; }

        public Guid GlobalTaskId { get; set; }


        public Guid SubjectId { get; set; }

        public List<CriterionDictionaryInfo> AssessTypeList { get; set; }

        public List<OncologyVisitTaskInfo> OncologyVisits { get; set; } = new List<OncologyVisitTaskInfo>();
    }

    public class GetRelatedVisitTaskOutDto
    {
        public Guid VisitTaskId { get; set; }
        public string TaskName { get; set; }

        public bool IsBaseLineTask { get; set; }

        public string TaskBlindName { get; set; }

        public ReadingTaskState ReadingTaskState { get; set; }

        public decimal VisitTaskNum { get; set; }

        public Guid? VisitId { get; set; }

        public bool IsCurrentTask { get; set; }
    }

    public class GetVisitReadingQuestionOutDto
    {
        public Guid QuestionId { get; set; }

        public Guid QuestionName { get; set; }

        //public 
    }

    public class GetVisitReadingQuestionInDto
    {
        public Guid TrialId { get; set; }

        public Guid VisitTaskId { get; set; }
    }

    public class GetRelatedVisitTaskInDto
    {
        [NotDefault]
        public Guid VisitTaskId { get; set; }
    }

    public class GetOncologyReadingInfoInDto
    {
        public Guid VisitTaskId { get; set; }
    }

    public class GetGlobalReadingInfoInDto
    {
        public Guid VisitTaskId { get; set; }

        /// <summary>
        /// 当新答案为空的时候 是否是有原数据
        /// </summary>
        public bool UsingOriginalData { get; set; } = false;
    }

    public class GetGlobalReadingInfoOutDto
    {
        public Guid GlobalTaskId { get; set; }

        public Guid? OtherGlobalTaskId { get; set; }

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

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

        public Guid? JudgeTaskId { get; set; }

        public string? JudgeTaskName { get; set; }

        public ReadingTaskState ReadingTaskState { get; set; }

        public string GlobalUpdateType { get; set; }

        public List<CriterionDictionaryInfo> AssessTypeList { get; set; }

        public List<GlobalVisitInfo> TaskList { get; set; }
    }

    public class GlobalVisitInfo
    {
        public string VisitName { get; set; }

        public string BlindName { get; set; }

        public Guid VisitId { get; set; }

        public Guid VisitTaskId { get; set; }

        public decimal VisitNum { get; set; }

        public bool IsBaseLine { get; set; }

        public Arm ArmEnum { get; set; }

        public string AgreeOrNotAnswer
        {
            get 
            {

                return this.AgreeOrNot.Select(x => x.Answer).FirstOrDefault()??string.Empty;
            }
        }

        public List<GlobalQuestionInfo> BeforeQuestionList { get; set; }

        public List<GlobalQuestionInfo> AgreeOrNot { get; set; }

        public List<GlobalQuestionInfo> AfterQuestionList { get; set; }
    }

    public class GetGlobalQuestionType
    {
        public GlobalAnswerType GlobalAnswerType { get; set; }

        public string QuestionName { get; set; }
    }
    public class GlobalQuestionInfo
    {
        public Guid? QuestionId { get; set; }

        public bool IsHaveChange { get; set; } = false;

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

        public string QuestionName { get; set; }

        public string Answer { get; set; }

        public bool IsGlobalAnswer { get; set; } = false;

        /// <summary>
		/// 问题类型
		/// </summary>
		public QuestionType? QuestionType { get; set; }


        /// <summary>
        /// 限制编辑
        /// </summary>
        public LimitEdit LimitEdit { get; set; } = LimitEdit.None;

        /// <summary>
		/// 最大答案长度
		/// </summary>
		public int? MaxAnswerLength { get; set; }

        /// <summary>
		/// 文件类型
		/// </summary>
		public string? FileType { get; set; }

        /// <summary>
		/// 字典code
		/// </summary>
		public string DictionaryCode { get; set; } = string.Empty;

        /// <summary>
		/// 全局阅片显示类型
		/// </summary>
		public GlobalReadingShowType GlobalReadingShowType { get; set; } = GlobalReadingShowType.NotShow;

        /// <summary>
        /// 问题类型
        /// </summary>
        public TableQuestionType? QuestionGenre { get; set; }




        /// <summary>
        /// 答案分组
        /// </summary>
        public string AnswerGroup { get; set; } = string.Empty;

        /// <summary>
        /// 答案组合
        /// </summary>
        public string AnswerCombination { get; set; } = string.Empty;

        /// <summary>
        /// 裁判类型
        /// </summary>
        public JudgeTypeEnum JudgeType { get; set; }

        /// <summary>
        /// 类型值
        /// </summary>
        public string TypeValue { get; set; }

        /// <summary>
		/// 数值类型
		/// </summary>
		public ValueOfType? ValueType { get; set; }

        /// <summary>
        /// 类型
        /// </summary>
        public string Type { get; set; }


        public GlobalAnswerType GlobalAnswerType { get; set; }

        /// <summary>
        /// 是否是裁判问题
        /// </summary>
        public bool IsJudgeQuestion { get; set; } = true;
    }

    public class GetReadingImgOutDto
    {
        public string Path { get; set; }

        public string FileName { get; set; }
    }

    public class SubjectTask
    {
        public Guid SubjectId { get; set; }

        public int UnReadTaskCount { get; set; }

        public int Index { get; set; }
    }


    public class GetNextTaskInDto
    {

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

        public Guid TrialId { get; set; }

        public Guid? SubjectId { get; set; }

        public Guid? TrialReadingCriterionId { get; set; }

        public Guid? VisitTaskId { get; set; }
    }

    public class GetReadingTaskDto
    {
        public Guid VisitTaskId { get; set; }
        public Guid VisistId { get; set; }

        public Arm ArmEnum { get; set; }

        public bool IsExistsClinicalData { get; set; }

        public bool IsNeedReadClinicalData { get; set; }

        public bool IsReadClinicalData { get; set; }

        /// <summary>
        /// 修约小数点
        /// </summary>
        public int? DigitPlaces { get; set; } = 2;


        /// <summary>
        /// 标准类型
        /// </summary>
        public CriterionType CriterionType { get; set; }

        /// <summary>
        ///  eCRF报告是否显示在图像页面
        /// </summary>
        public bool IseCRFShowInDicomReading { get; set; } = false;

        public bool IsExistsNoDicomFile { get; set; } = false;

        public string TaskBlindName { get; set; }

        public Guid SubjectId { get; set; }

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

        public ReadingCategory ReadingCategory { get; set; }

        public decimal VisitNum { get; set; }

        public bool IsReadingShowSubjectInfo { get; set; } = false;

        public bool IsReadingShowPreviousResults { get; set; } = false;

        /// <summary>
		/// 任务展示检查批次 读片任务显示是否顺序
		/// </summary>
		public bool IsReadingTaskViewInOrder { get; set; } = true;

        public Guid TrialReadingCriterionId { get; set; }

    }

    public class GetReadingImgInDto
    {

        public Guid? SubjectId { get; set; }

        [NotDefault]
        public Guid TrialId { get; set; }

        public Guid? VisistTaskId { get; set; }
    }

    public class GetConfirmCriterionInDto
    {
        [NotDefault]
        public Guid TrialId { get; set; }


        public Guid? VisitTaskId { get; set; }
    }



    /// <summary>
    /// 返回对象
    /// </summary>
    public class GetTrialConfirmCriterionListOutDto
    {
        public Guid ReadingQuestionCriterionTrialId { get; set; }

        /// <summary>
        /// 标准
        /// </summary>
        public string ReadingQuestionCriterionTrialName { get; set; }
    }


    public class SetTrialCriterionJudgeQuestionAnswerGroupInDto
    {
        [NotDefault]
        public Guid ReadingQuestionTrialId { get; set; }


        
        public List<string> AnswerGroup { get; set; }

      
        public List<AnswerCombinationDto> AnswerCombination { get; set; }


        
        public JudgeTypeEnum JudgeType { get; set; }
    }

    public class GetTrialCriterionJudgeQuestionListOutDto
    {
        public Guid ReadingQuestionTrialId { get; set; }
        
        public string QuestionName { get; set; }


        public string PageName { get; set; }


        public string TypeValue { get; set; }

        /// <summary>
        /// 问题类型
        /// </summary>
        public TableQuestionType? QuestionGenre { get; set; }

        /// <summary>
		/// 字典code
		/// </summary>
		public string DictionaryCode { get; set; } = string.Empty;

        /// <summary>
        /// 裁判类别
        /// </summary>
        public JudgeTypeEnum JudgeType { get; set; }

        /// <summary>
        /// 答案分组
        /// </summary>
        public List<string> AnswerGroup { get; set; }

        /// <summary>
        /// 答案组合
        /// </summary>
        public List<AnswerCombinationDto> AnswerCombination { get; set; }


    }

    public class GetTrialCriterionJudgeQuestionListInDto
    {
        [NotDefault]
        public Guid TrialId { get; set; }

        [NotDefault]
        public Guid TrialReadingCriterionId { get; set; }
    }

    public class VisitTaskArm
    {
        public Arm ArmEnum { get; set; }


        public Guid VisitTaskId { get; set; }
    }

    public class GetJudgeReadingInfoOutDto
    {
       public Guid? JudgeResultTaskId { get; set; }

       public List<JudgeReadingInfoDto> VisitInfoList { get; set; }
       
       public List<VisitTaskArm> VisitTaskArmList { get; set; }


        public ReadingTaskState ReadingTaskState { get; set; }

        /// <summary>
        /// 裁判结果的备注
        /// </summary>
        public string JudgeResultRemark { get; set; }

        public List<string> JudgeResultImagePathList { get; set; } = new List<string>();

        //public string JudgeResultImagePath { get; set; } = string.Empty;
    }

    public class GetReadingPastResultListOutDto
    {
        public Guid VisitTaskId { get; set; }
        public string TaskName { get; set; }

        public string TaskBlindName { get; set; }

        public decimal VisitTaskNum { get; set; }


        public Arm? JudgeResultArm { get; set; }
    }

    public class GetJudgeReadingPastResultListInDto
    {
        [NotDefault]
        public Guid VisitTaskId { get; set; }
    }

    public class GetReadingPastResultListInDto
    {
        [NotDefault]
        public Guid VisitTaskId { get; set; }
    }

    public class SaveJudgeVisitTaskResult
    {
        public Guid VisitTaskId { get; set; }

        public Guid JudgeResultTaskId { get; set; }

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

        //public string JudgeResultImagePath { get; set; } = string.Empty;

        public List<string> JudgeResultImagePathList { get; set; } = new List<string>();
    }

    public class GetReadingSubjectInfoOutDto
    {
        public Guid VisitTaskId { get; set; }

        public Guid SubjectId { get; set; }

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

        public ReadingCategory ReadingCategory { get; set; }

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

        public bool IsReadingShowPreviousResults { get; set; } = false;

        public bool IsReadingShowSubjectInfo { get; set; } = false;
    }

    public class GetReadingSubjectInfoInDto
    {
        public Guid VisitTaskId { get; set; }
    }
    public class GetJudgeReadingInfo
    {
        public Guid VisitTaskId { get; set; }
    }

    public class JudgeReadingInfoDto
    {
        public string VisitName { get; set; }

        public Guid VisitId { get; set; }

     
      
        public List<JudgeReadingQuestion> VisitTaskInfoList { get; set; }


    }


    public class JudgeReadingQuestion
    {
        public Arm ArmEnum { get; set; }


        public Guid GlobalVisitTaskId { get; set; }

        public Guid VisitTaskId { get; set; }

        public List<JudgeQuestion> JudgeQuestionList { get; set; }
    }

    public class GlobalVisitJudgeQuestion : JudgeQuestion
    {
        public Guid VisitTaskId { get; set; }

        /// <summary>
		/// 排序
		/// </summary>
		public int ShowOrder { get; set; }
    }

    public class JudgeQuestion
    {
        public Guid QuestionId { get; set; }


        public string QuestionName { get; set; }

      


        /// <summary>
        /// 问题类型
        /// </summary>
        public TableQuestionType? QuestionGenre { get; set; }

        /// <summary>
        /// 字典code
        /// </summary>
        public string DictionaryCode { get; set; } = string.Empty;

        public dynamic Answer { get; set; }

        public JudgeReadingQuestionType QuestionType { get; set; } = JudgeReadingQuestionType.Question;

    }

    public class GetSystemReadingQuestionInDto
    {
        [NotDefault]
        public Guid Id { get; set; }

      
    }

    public class VerifyVisitTaskDto
    {
        public QuestionType QuestionType { get; set; }

        public Func<ReadingCalculateDto, Task<string>> Fun { get; set; }
    }

    public class GetReportVerifyInDto
    {
       public Guid  VisitTaskId { get; set; }
    }



    public class VerifyVisitTaskQuestionsInDto
    {
        /// <summary>
        /// 任务Id
        /// </summary>
        public Guid VisitTaskId { get; set; }
    }

    public class TableQuestionData
    {
        public Guid TableQuestionId { get; set; }

        public int Count { get; set; }

    }

    public class SubmitTableQuestionOutDto
    {
        public Guid RowId { get; set; }
    }
    public class SubmitTableQuestionInDto
    {
        public Guid QuestionId { get; set; }

        public Guid? OrganInfoId { get; set; }

        public int? NumberOfFrames { get; set; }

        public decimal RowIndex { get; set; }

        /// <summary>
        /// 截图地址
        /// </summary>
        public string PicturePath { get; set; } = string.Empty;

        /// <summary>
		/// 任务Id
		/// </summary>
		public Guid VisitTaskId { get; set; }

        /// <summary>
        /// 项目Id
        /// </summary>
        public Guid TrialId { get; set; }

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

        public Guid? SeriesId { get; set; }

        public Guid? InstanceId { get; set; }

        public Guid? StudyId { get; set; }

        public Guid? RowId { get; set; }

        public bool IsCanEditPosition { get; set; } = false;

        public decimal FristAddTaskNum { get; set; } = 0;

        public decimal? WW { get; set; }

        public decimal? WL { get; set; }

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

        public bool IsDicomReading { get; set; } = true;

        public List<SubmitTableQuestionInfo> AnswerList { get; set; }

    }

    public class SubmitTableQuestionInfo
    {
        public Guid TableQuestionId { get; set; }

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

    public class GetTrialReadingQuestionInDto
    {
        [NotDefault]
        public Guid ReadingQuestionCriterionTrialId { get; set; }

        public Guid? VisitTaskId { get; set; }


        public FormType? FormType { get; set; }
    }

    public class SubmitDicomVisitTaskInDto
    {
        public Guid VisitTaskId { get; set; }
    }

    /// <summary>
    /// 
    /// </summary>
    public class SubmitVisitTaskQuestionsInDto
    {
        [NotDefault]
        public Guid TrialId { get; set; }
        [NotDefault]
        public Guid VisitTaskId { get; set; }
        [NotDefault]
        public Guid ReadingQuestionCriterionTrialId { get; set; }

        public List<QuestionAnswer> AnswerList { get; set; } = new List<QuestionAnswer>();

        
    }

    public class SaveJudgeTaskDto
    {
        public List<Guid> VisitTaskIds { get; set; }
    }

    public class QuestionAnswer
    {
        public Guid ReadingQuestionTrialId { get; set; }

        public string Answer { get; set; }
    }


    //public class GetTrialReadingQuestionDto
    //{
    //    public Guid Id { get; set; }

    //    public string GroupName { get; set; }

    //    List<GetTrialReadingQuestionOutDto> Questions { get; set; }
    //}

    public class GroupTaskAnswerDto
    {
        public Guid QuestionId { get; set; }

        public string AnswerGroup { get; set; }


        public string AnswerCombination { get; set; }

        public JudgeTypeEnum JudgeType { get; set; }

        public List<string> TaskAnswerList { get; set; }
    }

    public class TaskGroupAnswer
    {
        public string Answer { get; set; }
    }

    public class AnswerGroup
    {
        public Guid GroupId { get; set; }

        public string GroupValue { get; set; }
    }


    public class AnswerCombinationDto
    {
        public List<string> AnswerGroupA { get; set; }

        public List<string> AnswerGroupB { get; set; }
    }

    public class TaskAnswerDto
    {
        public Guid VisitTaskId { get; set; }

        public Guid QuestionId { get; set; }

        public decimal VisitTaskNum { get; set; }
        public string Answer { get; set; }

        public string AnswerGroup { get; set; }

        public string AnswerCombination { get; set; }

        public JudgeTypeEnum JudgeType { get; set; }
    }


    public class GetSystemReadingQuestionPageDto
    {
        public List<GetSystemReadingQuestionOutDto> SinglePage { get; set; }

        public List<GetSystemReadingQuestionOutDto> MultiPage { get; set; }

        public List<GetSystemReadingQuestionOutDto> PublicPage { get; set; }
    }

    public class GetTrialReadingQuestionPageDto
    {
        public List<GetTrialReadingQuestionOutDto> SinglePage { get; set; }

        public List<GetTrialReadingQuestionOutDto> MultiPage { get; set; }

        public List<GetTrialReadingQuestionOutDto> PublicPage{ get; set; }
    }

    public class TableQuestionDataInfo
    {
        /// <summary>
        /// 
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 问题ID
        /// </summary>
		public Guid ReadingQuestionId { get; set; }

        /// <summary>
        /// 字典code
        /// </summary>
        public string DictionaryCode { get; set; } = string.Empty;


        /// <summary>
		/// 问题类型
		/// </summary>
		public TableQuestionType? QuestionGenre { get; set; }

        /// <summary>
        /// Type
        /// </summary>
        public string Type { get; set; }

        /// <summary>
        /// ParentId
        /// </summary>
        public Guid? ParentId { get; set; }

        /// <summary>
        ///父问题触发值
        /// </summary>
        public string ParentTriggerValue { get; set; }

        /// <summary>
        /// 问题名称
        /// </summary>
        public string QuestionName { get; set; }

        /// <summary>
        /// IsRequired
        /// </summary>
        public IsRequired IsRequired { get; set; }

        /// <summary>
        /// 排序号
        /// </summary>
        public int ShowOrder { get; set; }

        /// <summary>
        /// 值
        /// </summary>
        public string TypeValue { get; set; }

        /// <summary>
        /// 是否启用
        /// </summary>
        public bool IsEnable { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreateTime { get; set; }

        /// <summary>
        /// 创建用户
        /// </summary>
        public Guid CreateUserId { get; set; }

        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }

        /// <summary>
        /// 显示父问题
        /// </summary>
        public Guid? RelevanceId { get; set; }

        /// <summary>
        /// 显示父问题的值
        /// </summary>
        public string RelevanceValue { get; set; }

        /// <summary>
        /// 是否显示
        /// </summary>
        public int ShowQuestion { get; set; }

        /// <summary>
        /// 最大问题数
        /// </summary>
        public int? MaxRowCount { get; set; }

        /// <summary>
        /// 数据表名称
        /// </summary>
        public string DataTableName { get; set; }

        /// <summary>
        /// 数据列
        /// </summary>
        public string DataTableColumn { get; set; }


        /// <summary>
        /// 关联父问题
        /// </summary>
        public Guid? DependParentId { get; set; }

        /// <summary>
        /// 是否关联
        /// </summary>
        public IsDepend IsDepend { get; set; }

        /// <summary>
        /// 表格问题类型
        /// </summary>
        public TableQuestionType? TableQuestionType { get; set; }


        /// <summary>
        /// 问题标识
        /// </summary>
        public QuestionMark? QuestionMark { get; set; }
    }


    public class GetSystemReadingQuestionOutDto
    {

        public Guid Id { get; set; }

        /// <summary>
		/// 系统标准Id
		/// </summary>
		public Guid ReadingQuestionCriterionSystemId { get; set; }


        /// <summary>
		/// 问题类型
		/// </summary>
		public TableQuestionType? QuestionGenre { get; set; }

        /// <summary>
        /// 字典code
        /// </summary>
        public string DictionaryCode { get; set; }

        /// <summary>
        /// 默认值
        /// </summary>
        public string DefaultValue { get; set; } = string.Empty;


        /// <summary>
        /// 类型
        /// </summary>
        public string Type { get; set; }

        /// <summary>
        /// 父问题触发
        /// </summary>
        public string ParentTriggerValue { get; set; }

        /// <summary>
        /// 问题名称
        /// </summary>
        public string QuestionName { get; set; }

        /// <summary>
        /// 是否是必须
        /// </summary>
        public IsRequired IsRequired { get; set; }

        /// <summary>
        /// 排序
        /// </summary>
        public int ShowOrder { get; set; }

        /// <summary>
        /// 父问题ID
        /// </summary>
        public Guid? ParentId { get; set; }

        /// <summary>
        /// 数据列
        /// </summary>
        public string DataTableColumn { get; set; } = string.Empty;

        /// <summary>
        /// 类型值
        /// </summary>
        public string TypeValue { get; set; }

        /// <summary>
        /// 是否启用
        /// </summary>
        public bool IsEnable { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreateTime { get; set; }

        /// <summary>
        /// 是否是裁判问题
        /// </summary>
        public bool IsJudgeQuestion { get; set; }

        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }

        /// <summary>
        /// 关联ID
        /// </summary>
        public Guid? RelevanceId { get; set; }

        /// <summary>
        /// 关联Value
        /// </summary>
        public string RelevanceValue { get; set; } = string.Empty;

        /// <summary>
        /// 分组
        /// </summary>
        public string GroupName { get; set; }

        /// <summary>
        /// 图片数量
        /// </summary>
        public int ImageCount { get; set; } = 1;

        /// <summary>
        /// 是否显示
        /// </summary>
        public ShowQuestion ShowQuestion { get; set; } = ShowQuestion.Show;

        /// <summary>
        /// 最大问题数
        /// </summary>
        public int? MaxQuestionCount { get; set; }

        /// <summary>
        /// 病灶类型
        /// </summary>
        public LesionType? LesionType { get; set; }

        /// <summary>
        /// 问题类型
        /// </summary>
        public QuestionType? QuestionType { get; set; }

        /// <summary>
        /// 是否显示在Dicom阅片中
        /// </summary>
        public bool IsShowInDicom { get; set; }


     

        /// <summary>
        /// 序号标记
        /// </summary>
        public string OrderMark { get; set; } = string.Empty;


        /// <summary>
        /// 关联父问题
        /// </summary>
        public Guid? DependParentId { get; set; }

        /// <summary>
        /// 是否关联
        /// </summary>
        public IsDepend? IsDepend { get; set; }

        /// <summary>
        /// 表格问题类型
        /// </summary>
        public TableQuestionType? TableQuestionType { get; set; }


        /// <summary>
        /// 问题标识
        /// </summary>
        public QuestionMark? QuestionMark { get; set; }

        public List<GetSystemReadingQuestionOutDto> RelationQuestions { get; set; }



        //public List<TableQuestionDataInfo> TableQuestions { get; set; }

        public List<GetSystemReadingQuestionOutDto> Childrens { get; set; }
    }

    public class GetTrialReadingQuestionOutDto
    {



        /// <summary>
        /// 字典code
        /// </summary>
        public string DictionaryCode { get; set; }


        /// <summary>
		/// 问题类型
		/// </summary>
		public TableQuestionType? QuestionGenre { get; set; }

        /// <summary>
        /// 项目标准Id
        /// </summary>
        public Guid ReadingQuestionCriterionTrialId { get; set; }

        /// <summary>
        /// 项目Id
        /// </summary>
        public Guid TrialId { get; set; }

        /// <summary>
        /// 类型
        /// </summary>
        public string Type { get; set; }

        /// <summary>
        /// 父问题触发
        /// </summary>
        public string ParentTriggerValue { get; set; }

        public string GroupName { get; set; }

        /// <summary>
        /// 问题名称
        /// </summary>
        public string QuestionName { get; set; }

        /// <summary>
        /// 是否是必须
        /// </summary>
        public IsRequired IsRequired { get; set; }

        /// <summary>
        /// 排序
        /// </summary>
        public int ShowOrder { get; set; }


        public int? PageShowOrder { get; set; }

        /// <summary>
        /// 父问题ID
        /// </summary>
        public Guid? ParentId { get; set; }


        /// <summary>
        /// 类型值
        /// </summary>
        public string TypeValue { get; set; }

        /// <summary>
        /// 答案
        /// </summary>
        public string Answer { get; set; }

        /// <summary>
        /// 分页名称
        /// </summary>
		public string? PageName { get; set; }


        public bool? IsPublicPage { get; set; }

        public bool IsPage { get; set; } = false;

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

        /// <summary>
		/// 标准分页Id
		/// </summary>
		public Guid? ReadingCriterionPageId { get; set; }

        /// <summary>
        /// 关联ID
        /// </summary>
        public Guid? RelevanceId { get; set; }

        /// <summary>
        /// 关联Value
        /// </summary>
        public string RelevanceValue { get; set; } = string.Empty;

        /// <summary>
		/// 图片数量
		/// </summary>
		public int ImageCount { get; set; }


        /// <summary>
        /// 是否显示
        /// </summary>
        public ShowQuestion ShowQuestion { get; set; }

        /// <summary>
        /// 最大问题数
        /// </summary>
        public int? MaxQuestionCount { get; set; }

        /// <summary>
        /// 病灶类型
        /// </summary>
        public LesionType? LesionType { get; set; }

        /// <summary>
        /// 问题类型
        /// </summary>
        public QuestionType? QuestionType { get; set; }

        /// <summary>
        /// 是否显示在Dicom阅片中
        /// </summary>
        public bool IsShowInDicom { get; set; } = false;

        //public List<TableQuestionDataInfo> TableQuestions { get; set; }


        public List<GetTrialReadingQuestionOutDto> RelationQuestions { get; set; }
  

        public List<GetTrialReadingQuestionOutDto> Childrens { get; set; }


        public Guid Id { get; set; }


        public Guid? GroupId { get; set; }


        /// <summary>
        /// 数据列
        /// </summary>
        public string DataTableColumn { get; set; } = string.Empty;

       

        /// <summary>
        /// 是否启用
        /// </summary>
        public bool IsEnable { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreateTime { get; set; }

        /// <summary>
        /// 是否是裁判问题
        /// </summary>
        public bool IsJudgeQuestion { get; set; }

        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }

    
        /// <summary>
        /// 序号标记
        /// </summary>
        public string OrderMark { get; set; } = string.Empty;


        /// <summary>
        /// 关联父问题
        /// </summary>
        public Guid? DependParentId { get; set; }

        /// <summary>
        /// 是否关联
        /// </summary>
        public IsDepend? IsDepend { get; set; }

        /// <summary>
        /// 表格问题类型
        /// </summary>
        public TableQuestionType? TableQuestionType { get; set; }


        /// <summary>
        /// 问题标识
        /// </summary>
        public QuestionMark? QuestionMark { get; set; }




        /// <summary>
        /// 数值类型
        /// </summary>
        public ValueOfType? ValueType { get; set; }

        /// <summary>
        /// 单位
        /// </summary>
        public ValueUnit? Unit { get; set; }






    }

    ///// <summary>
    ///// 表格问题
    ///// </summary>
    //public class GetTrialReadingTableQuestion
    //{
    //    public List<> class TrialReadingTableQuestion
    //}


    //public class TrialReadingTableQuestion
    //{
        
    //}
}
