using IRaCIS.Core.Domain.Share;
using Newtonsoft.Json;
using System.ComponentModel.DataAnnotations.Schema;
namespace IRaCIS.Core.Application.Service.Reading.Dto
{
    #region 获取计算问题
    public class GetTrialClinicalQuestionCalculateRelationInDto
    {
        /// 
        /// 项目临床数据Id
        /// 
        public Guid TrialClinicalId { get; set; }
    }
    public class GetTrialClinicalQuestionCalculateRelationOutDto
    {
        public Guid QuestionId { get; set; }
        /// 
        /// 问题名称
        /// 
        public string QuestionName { get; set; }
        /// 
        /// 自定义计算标记
        /// 
        public ClinicalCalculateMark? CustomCalculateMark { get; set; }
        /// 
        /// 数值类型
        /// 
        public ValueOfType? ValueType { get; set; }
        /// 
        /// 单位
        /// 
        public ValueUnit? Unit { get; set; }
        /// 
        /// 自定义单位
        /// 
        public string CustomUnit { get; set; } = string.Empty;
        public List CalculateQuestionList { get; set; }
    }
    public class GetClinicalCalculateQuestionsOutDto
    {
        public Guid QuestionId { get; set; }
        public string QuestionName { get; set; }
        public List TableQuestions { get; set; }
    }
    public class GetClinicalCalculateQuestionsInDto
    {
        /// 
        /// 项目临床数据Id
        /// 
        public Guid TrialClinicalId { get; set; }
        /// 
        /// 临床问题类型(分组,单选。)
        /// 
        public string ClinicalQuestionType { get; set; } = string.Empty;
    }
    #endregion
    #region 预览
    public class GetSystemClinicalQuestionPreviewDto
    {
        /// 
        /// 系统临床数据Id
        /// 
        public Guid SystemClinicalId { get; set; }
    }
    public class GetTrialClinicalQuestionPreviewDto
    {
        /// 
        /// 项目临床数据Id
        /// 
        public Guid TrialClinicalId { get; set; }
    }
    /// 
    /// 项目预览问题Dto
    /// 
    public class ClinicalQuestionPreviewDto : TrialClinicalQuestionDto
    {
        /// 
        /// 系统临床数据Id
        /// 
        public Guid SystemClinicalId { get; set; }
        public string Answer { get; set; } = string.Empty;
        public DateTime? CreateTime { get; set; }
        /// 
        /// 子问题
        /// 
        public List Childrens { get; set; } = new List();
        /// 
        /// 关联问题
        /// 
        public List RelationQuestions { get; set; } = new List();
        /// 
        /// 表格问题
        /// 
        public List TableQuestions { get; set; } = new List();
        public List> TableAnswer { get; set; }
    }
    /// 
    /// 项目临床数据问题
    /// 
    public class ClinicalTablePreviewDto : TrialClinicalTableQuestionDto
    {
        /// 
        /// 系统临床数据Id
        /// 
        public Guid SystemClinicalId { get; set; }
    }
    #endregion
    #region 外层问题
    /// 
    /// 临床问题基本信息
    /// 
    public class ClinicalQuestionBase
    {
        /// 
        /// Id
        /// 
        public Guid? Id { get; set; }
        public bool IsVerify { get; set; } = false;
        /// 
        /// 问题名称
        /// 
        public string QuestionName { get; set; } = string.Empty;
        /// 
        /// 问题英文名称
        /// 
        public string QuestionEnName { get; set; } = string.Empty;
        /// 
        /// 分组名称
        /// 
        public string? GroupName { get; set; } = string.Empty;
        /// 
        /// 分组英文名称
        /// 
        public string? GroupEnName { get; set; } = string.Empty;
        /// 
        /// 临床问题类型(分组,单选。)
        /// 
        public string ClinicalQuestionType { get; set; }
        /// 
        /// 问题标识
        /// 
        public ClinicalQuestionMark? ClinicalQuestionMarkEnum { get; set; }
        /// 
        /// 最大长度
        /// 
        public int? MaxAnswerLength { get; set; }
        /// 
        /// 最大行数
        /// 
        public int? MaxQuestionCount { get; set; }
        /// 
        /// 临床数据选项类型(无,自定义)
        /// 
        public ClinicalOptionType ClinicalOptionTypeEnum { get; set; }
        /// 
        /// 分组Id
        /// 
        public Guid? GroupId { get; set; }
        /// 
        /// 自定义选项
        /// 
        public string TypeValue { get; set; } = string.Empty;
        /// 
        /// 字典Code
        /// 
        public string DictionaryCode { get; set; } = string.Empty;
        /// 
        /// 排序
        /// 
        public int ShowOrder { get; set; } = 0;
        /// 
        /// 是否必填
        /// 
        public IsRequired IsRequired { get; set; }
        /// 
        /// 关联Value
        /// 
        public string RelevanceValue { get; set; } = string.Empty;
        /// 
        /// 关联ID
        /// 
        public Guid? RelevanceId { get; set; }
        /// 
        /// 父问题Id
        /// 
        public Guid? ParentId { get; set; }
        /// 
        /// 父问题触发值
        /// 
        public string ParentTriggerValue { get; set; } = string.Empty;
        /// 
        /// 显示类型
        /// 
        public ClinicalQuestionShow ClinicalQuestionShowEnum { get; set; } = ClinicalQuestionShow.Show;
        /// 
        /// 是否是检查日期
        /// 
        public bool IsCheckDate { get; set; }
        /// 
        /// 小数点位数
        /// 
        public int? DigitPlaces { get; set; }
        /// 
        /// 单位
        /// 
        public string Unit { get; set; } = string.Empty;
        /// 
        /// 自定义计算标记
        /// 
        public ClinicalCalculateMark? CustomCalculateMark { get; set; }
        /// 
        /// 自定义计算问题
        /// 
        public string CalculateQuestions { get; set; } = "[]";
        [NotMapped]
        public List CalculateQuestionList
        {
            get
            {
                try
                {
                    var result = JsonConvert.DeserializeObject>(this.CalculateQuestions);
                    return result == null ? new List() : result;
                }
                catch (Exception)
                {
                    return new List();
                }
            }
        }
    }
    /// 
    /// 查询临床数据基类
    /// 
    public class ClinicalQuestionQueryBase : PageInput
    {
        /// 
        /// 问题名称
        /// 
        public string QuestionName { get; set; } = string.Empty;
    }
    /// 
    /// 获取项目临床数据
    /// 
    public class TrialClinicalQuestionQuery : ClinicalQuestionQueryBase
    {
        public Guid TrialClinicalId { get; set; }
    }
    /// 
    /// 获取项目分组
    /// 
    public class GetTrialGroupDto
    {
        public Guid TrialClinicalId { get; set; }
    }
    /// 
    /// 项目临床数据问题
    /// 
    public class TrialClinicalQuestionDto : ClinicalQuestionBase
    {
        /// 
        /// 项目临床数据Id
        /// 
        public Guid TrialClinicalId { get; set; }
    }
    /// 
    /// 获取系统临床数据
    /// 
    public class SystemClinicalQuestionQuery : ClinicalQuestionQueryBase
    {
        public Guid SystemClinicalId { get; set; }
    }
    /// 
    /// 系统临床数据问题
    /// 
    public class SystemClinicalQuestionDto : ClinicalQuestionBase
    {
        /// 
        /// 系统临床数据Id
        /// 
        public Guid SystemClinicalId { get; set; }
    }
    /// 
    /// 获取系统分组
    /// 
    public class GetSystemGroupDto
    {
        public Guid SystemClinicalId { get; set; }
    }
    public class GetClinicalOtherTableQuestionListInDto
    {
        public Guid QuestionId { get; set; }
        public Guid TableQuestionId { get; set; }
    }
    #endregion
    #region 表格问题
    public class ClinicalTableQuestionBase
    {
        public Guid? Id { get; set; }
        public bool IsVerify { get; set; } = false;
        /// 
        /// 问题名称
        /// 
        public string QuestionName { get; set; } = string.Empty;
        /// 
        /// 问题英文名称
        /// 
        public string QuestionEnName { get; set; } = string.Empty;
        /// 
        /// 临床问题类型(分组,单选。)
        /// 
        public string ClinicalTableQuestionType { get; set; }
        /// 
        /// 问题标识
        /// 
        public ClinicalTableQuestionMark? ClinicalTableQuestionMarkEnum { get; set; }
        /// 
        /// 最大长度
        /// 
        public int? MaxAnswerLength { get; set; }
        /// 
        /// 临床数据选项类型(无,自定义)
        /// 
        public ClinicalOptionType ClinicalOptionTypeEnum { get; set; }
        /// 
        /// 自定义选项
        /// 
        public string TypeValue { get; set; }
        /// 
        /// 字典Code
        /// 
        public string DictionaryCode { get; set; } = string.Empty;
        /// 
        /// 排序
        /// 
        public int ShowOrder { get; set; }
        /// 
        /// 是否必填
        /// 
        public IsRequired IsRequired { get; set; }
        /// 
        /// 创建时间
        /// 
        public DateTime CreateTime { get; set; }
        /// 
        /// 创建人
        /// 
        public Guid CreateUserId { get; set; }
        /// 
        /// 外层问题Id
        /// 
        public Guid QuestionId { get; set; }
        /// 
        /// 小数点位数
        /// 
        public int? DigitPlaces { get; set; }
        /// 
        /// 单位
        /// 
        public string Unit { get; set; } = string.Empty;
        /// 
        /// 关联ID
        /// 
        public Guid? RelevanceId { get; set; }
        /// 
        /// 关联Value
        /// 
        public string RelevanceValue
        {
            get
            {
                return string.Join(',', this.RelevanceValueList);
            }
        }
        public List RelevanceValueList { get; set; } = new List();
    }
    /// 
    /// 项目临床数据问题
    /// 
    public class TrialClinicalTableQuestionDto : ClinicalTableQuestionBase
    {
        /// 
        /// 项目临床数据Id
        /// 
        public Guid TrialClinicalId { get; set; }
        /// 
        /// 自定义计算标记
        /// 
        public ClinicalCalculateMark? ClinicalCalculateMarkEnum { get; set; }
        /// 
        /// 自定义计算问题
        /// 
        public string CalculateQuestions { get; set; } = "[]";
    }
    /// 
    /// 系统临床数据问题
    /// 
    public class SystemClinicalTableQuestionDto : ClinicalTableQuestionBase
    {
        /// 
        /// 系统临床数据Id
        /// 
        public Guid SystemClinicalId { get; set; }
    }
    /// 
    /// 查询临床数据基类
    /// 
    public class ClinicalTableQuestionQueryBase : PageInput
    {
        /// 
        /// 问题名称
        /// 
        public string QuestionName { get; set; } = string.Empty;
        /// 
        /// 外层问题Id
        /// 
        public Guid QuestionId { get; set; }
    }
    /// 
    /// 获取项目临床数据
    /// 
    public class TrialClinicalTableQuestionQuery : ClinicalTableQuestionQueryBase
    {
    }
    /// 
    /// 获取系统临床数据
    /// 
    public class SystemClinicalTableQuestionQuery : ClinicalTableQuestionQueryBase
    {
    }
    #endregion
    #region 同步临床数据
    public class TrialClinicalTableQuestionSynchronize : TrialClinicalTableQuestion
    {
        /// 
        /// 系统临床数据Id
        /// 
        public Guid SystemClinicalId { get; set; }
    }
    public class TrialClinicalQuestionSynchronize : TrialClinicalQuestion
    {
        /// 
        /// 系统临床数据Id
        /// 
        public Guid SystemClinicalId { get; set; }
    }
    public class SynchronizationQuestionDto
    {
        /// 
        /// 系统临床数据Id
        /// 
        public Guid SystemClinicalId { get; set; }
        /// 
        /// 项目临床数据Id
        /// 
        public Guid TrialClinicalId { get; set; }
    }
    public class QuestionDic
    {
        public Guid SystemQuestionId { get; set; }
        public Guid TrialQuestionId { get; set; }
        /// 
        /// 项目临床数据Id
        /// 
        public Guid TrialClinicalId { get; set; }
    }
    #endregion
}