using IRaCIS.Core.Domain.Share;
using Newtonsoft.Json;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace IRaCIS.Core.Application.Service.Reading.Dto
{
    public class VisitTaskDto
    {
        public Guid Id { get; set; }
        public string TaskName { get; set; } = string.Empty;
        public string TaskBlindName { get; set; } = string.Empty;
        //任务来源访视Id  方便回更访视读片状态
        public Guid? SourceSubjectVisitId { get; set; }
        public Guid? SouceReadModuleId { get; set; }
        /// 
        /// 任务类型
        /// 
        public ReadingCategory ReadingCategory { get; set; }
        public Guid CreateUserId { get; set; }
        public DateTime CreateTime { get; set; }
        public DateTime UpdateTime { get; set; }
        public Guid UpdateUserId { get; set; }
        public Guid TrialId { get; set; }
        /// 
        /// 分配时间
        /// 
        public DateTime? AllocateTime { get; set; }
        public Guid SubjectId { get; set; }
        public int Code { get; set; }
        public string TaskCode { get; set; } = string.Empty;
        public bool IsUrgent { get; set; }
        /// 
        /// 加急类型
        /// 
        public TaskUrgentType? TaskUrgentType { get; set; }
        /// 
        /// 任务加急类型
        /// 
        public string TaskUrgentRemake { get; set; } = string.Empty;
        /// 
        /// 是否和编辑加急状态
        /// 
        public bool IsCanEditUrgentState { get; set; } = true;
        /// 
        /// 0 代表 单重阅片 产生的任务    否则就是双重  任务 1 任务  2 
        /// 
        [Required]
        public Arm ArmEnum { get; set; }
        /// 
        /// 分配状态
        /// 
        public TaskAllocationState TaskAllocationState { get; set; }
        public TaskState TaskState { get; set; }
        /// 
        /// 重阅状态
        /// 
        public ReReadingApplyState ReReadingApplyState { get; set; }
        public Guid? DoctorUserId { get; set; }
        public Guid TrialReadingCriterionId { get; set; }
        //裁判任务的Id
        public Guid? JudgeVisitTaskId { get; set; }
        //任务阅片状态
        public ReadingTaskState ReadingTaskState { get; set; }
        //签名时间
        public DateTime? SignTime { get; set; }
        public DateTime? SuggesteFinishedTime { get; set; }
        /// 
        /// 是否是重阅产生的,方便过滤数据
        /// 
        public bool IsReReadingCreate { get; set; }
        /// 
        /// PM  对该任务进行了回退  影响的任务不设置
        /// 
        public bool IsPMSetBack { get; set; }
        ///  裁判结果的任务ID 
        public Guid? JudgeResultTaskId { get; set; }
        //随访任务号   取访视的号  计划外是 访视+0.1   裁判任务在访视任务上+0.002   全局任务在截止访视号上+0.03   肿瘤待定   
        public decimal VisitTaskNum { get; set; }
        /// 
        /// 首次阅片时间
        /// 
        public DateTime? FirstReadingTime { get; set; }
        /// 
        /// 全局是否有更新
        /// 
        public bool? IsGlobalHaveUpdate { get; set; }
        /// 
        /// IR是否阅读临床数据
        /// 
        public bool IsReadClinicalData { get; set; } = false;
        /// 
        /// 关联的访视任务ID (当前任务是访视任务的话会有自己)
        /// 
        public string RelatedVisitTaskIds { get; set; } = "[]";
        /// 
        /// 关联的访视任务ID (当前任务是访视任务的话会有自己)集合
        /// 
        [NotMapped]
        public List RelatedVisitTaskIdList
        {
            get
            {
                try
                {
                    return JsonConvert.DeserializeObject>(this.RelatedVisitTaskIds);
                }
                catch (Exception)
                {
                    return new List();
                }
            }
        }
        /// 
        /// 既往任务Id  不包括自己
        /// 
        public string PastResultTaskIds { get; set; } = "[]";
        /// 
        /// 既往任务Id  不包括自己集合
        /// 
        [NotMapped]
        public List PastResultTaskIdList
        {
            get
            {
                try
                {
                    return JsonConvert.DeserializeObject>(this.PastResultTaskIds);
                }
                catch (Exception)
                {
                    return new List();
                }
            }
        }
        #region 裁判任务特有
        /// 
        /// 裁判结果的备注
        /// 
        public string JudgeResultRemark { get; set; } = string.Empty;
        /// 
        /// 裁判结果的图片路径
        /// 
        public string JudgeResultImagePath { get; set; } = string.Empty;
        #endregion
        #region  一致性分析的任务特有数据
        /// 
        /// 阅片结果是否和原数据有差异
        /// 
        public bool? IsAnalysisDiffToOriginalData { get; set; }
        /// 
        /// 组件一致性和原Arm1是否有差异
        /// 
        public bool? IsGroupDiffArm1 { get; set; }
        /// 
        /// 组件一致性和原Arm2是否有差异
        /// 
        public bool? IsGroupDiffArm2 { get; set; }
        /// 
        /// 是否是一致性分析产生
        /// 
        public bool IsAnalysisCreate { get; set; }
        /// 
        /// 转换之前的任务Id(转化的任务才有该值)
        /// 
        public Guid? BeforeConvertedTaskId { get; set; }
        // [Projectable]
        public bool IsConvertedTask { get; set; }
        //[NotMapped]
        //public List CrterionDictionaryGroup
        //{
        //    get
        //    {
        //        try
        //        {
        //            if (this.IsConvertedTask)
        //            {
        //                return new List() { Share.CrterionDictionaryGroup.General, Share.CrterionDictionaryGroup.Converted };
        //            }
        //            else
        //            {
        //                return new List() { Share.CrterionDictionaryGroup.General, Share.CrterionDictionaryGroup.BeforeConvert };
        //            }
        //        }
        //        catch (Exception)
        //        {
        //            return new List();
        //        }
        //    }
        //  }
        public bool? IsSelfAnalysis { get; set; }
        public string BlindSubjectCode { get; set; } = string.Empty;
        public string BlindTrialSiteCode { get; set; } = string.Empty;
        //一致性分析规则Id  用于最后统计
        //public Guid? TaskConsistentRuleId { get; set; }
        /// 
        /// 针对产生的一致性任务而言,这个字段存储的是原始任务
        /// 
        public Guid? ConsistentAnalysisOriginalTaskId { get; set; }
        #endregion
        //临床数据
        public bool IsNeedClinicalDataSign { get; set; }
        public bool IsClinicalDataSign { get; set; }
        //前序任务需要签名 但是未签名
        public bool IsFrontTaskNeedSignButNotSign { get; set; }
        /// 
        /// 裁判结果图片地址
        /// 
        [NotMapped]
        public List JudgeResultImagePathList
        {
            get
            {
                try
                {
                    return this.JudgeResultImagePath.Trim().Split(',').ToList();
                }
                catch (Exception)
                {
                    return new List();
                }
            }
        }
    }
}