using IRaCIS.Application.Contracts;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Contracts.DTO;
using IRaCIS.Core.Domain.Share;
using System.ComponentModel.DataAnnotations;
namespace IRaCIS.Core.Application.Service.Inspection.DTO
{
    public class DataInspectionAddDTO
    {
        public Guid? TrialId { get; set; }
        public Guid? TrialSiteId { get; set; }
        public Guid? SubjectId { get; set; }
        public Guid? SubjectVisitId { get; set; }
        /// 
        /// 子类
        /// 
        public Guid? ChildrenType { get; set; }
        /// 
        /// 对象名称
        /// 
        public Guid? ObjectType { get; set; }
        /// 
        /// 操作类型
        /// 
        public Guid? OptType { get; set; }
        /// 
        /// 功能模块
        /// 
        public Guid? ModuleType { get; set; }
        public string BlindName { get; set; } = string.Empty;
        public string Reason { get; set; } = string.Empty;
        public bool IsSign { get; set; }
        public string JsonDetail { get; set; } = string.Empty;
        /// 
        /// 创建人名称
        /// 
        public string CreateUserName { get; set; } = string.Empty;
        /// 
        /// 项目名称
        /// 
        public string TrialName { get; set; } = string.Empty;
        /// 
        /// 中心名称
        /// 
        public string SiteName { get; set; } = string.Empty;
        /// 
        /// 受试者Code
        /// 
        public string SubjectCode { get; set; } = string.Empty;
        /// 
        /// 访视名称
        /// 
        public string SubjectVisitName { get; set; } = string.Empty;
        /// 
        /// 角色名称
        /// 
        public string RoleName { get; set; } = string.Empty;
        /// 
		/// 中心Code
		/// 
		public string SiteCode { get; set; } = string.Empty;
        /// 
        /// 项目编码
        /// 
        public string ResearchProgramNo { get; set; } = string.Empty;
        public List EnumList { get; set; } = new List { };
        /// 
        /// 标识
        /// 
        public string Identification { get; set; } = string.Empty;
        /// 
        /// 访视计划ID
        /// 
        public Guid? VisitStageId { get; set; }
        /// 
        /// 通用ID
        /// 
        public Guid? GeneralId { get; set; }
        ////需要单独处理
        //public string IP { get; set; }
        public DateTime? CreateTime { get; set; } = DateTime.Now;
        public bool NeedSava { get; set; } = true;
    }
    public class EnumList
    {
        public string Key { get; set; } = string.Empty;
        public string Code { get; set; } = string.Empty;
        public string Type { get; set; } = string.Empty;
    }
    public interface IInspectionDTO
    {
        public DataInspectionAddDTO AuditInfo { get; set; }
    }
    public interface ISignDTO
    {
        public SignDTO SignInfo { get; set; }
    }
    #region Setting
    /// 
    /// 配置 基础逻辑信息
    /// 
    public class InsBasicTrialConfig : InspectionBase, IInspectionDTO, ISignDTO
    {
        public BasicTrialConfig OptCommand { get; set; }
    }
    /// 
    /// 配置流程
    /// 
    public class InsTrialProcessConfig : InspectionBase, IInspectionDTO, ISignDTO
    {
        public TrialProcessConfig OptCommand { get; set; }
    }
    /// 
    /// 配置加急信息
    /// 
    public class InsTrialUrgentConfig : InspectionBase, IInspectionDTO, ISignDTO
    {
        public TrialUrgentConfig OptCommand { get; set; }
    }
    #endregion
    public class SetCheckPassDto
    {
        public Guid qcChallengeId { get; set; }
        public Guid subjectVisitId { get; set; }
        public QCChallengeCloseEnum closeEnum { get; set; }
        public string closeReason { get; set; }
    }
    public class SetNeedReuploadDto
    {
        public Guid trialId { get; set; }
        public Guid qcChallengeId { get; set; }
    }
    public class SetVisitUrgentDto
    {
        public Guid trialId { get; set; }
        public Guid subjectVisitId { get; set; }
        public bool setOrCancel { get; set; }
    }
    public class UpdateTrialStateDto
    {
        public Guid trialId { get; set; }
        public string trialStatusStr { get; set; }
        public string? reason { get; set; }
    }
    public class QCPassedOrFailedDto
    {
        public Guid trialId { get; set; }
        public Guid subjectVisitId { get; set; }
        public AuditStateEnum auditState { get; set; }
    }
    public class SetSeriesStateDto
    {
        public Guid subjectVisitId { get; set; }
        public Guid studyId { get; set; }
        public Guid seriesId { get; set; }
        public int state { get; set; }
    }
    public class UpdateModalityDto
    {
        public Guid id { get; set; }
        public int type { get; set; }
        public string modality { get; set; }
        public string bodyPart { get; set; }
    }
    public class CloseQCChallengeDto
    {
        public Guid qcChallengeId { get; set; }
        public Guid subjectVisitId { get; set; }
        public QCChallengeCloseEnum closeEnum { get; set; }
        public string closeReason { get; set; }
    }
    public class AddOrUpdateQCChallengeDto
    {
        public QCChallengeCommand qaQuestionCommand { get; set; }
        public Guid trialId { get; set; }
        public TrialQCProcess trialQCProcess { get; set; }
        public CurrentQC currentQCType { get; set; }
    }
    public class AddOrUpdateQCQuestionAnswerListDto
    {
        public QCQuestionAnswerCommand[] qcQuestionAnswerCommands { get; set; }
        public Guid trialId { get; set; }
        public Guid subjectVisitId { get; set; }
        public TrialQCProcess trialQCProcess { get; set; }
        public CurrentQC currentQCType { get; set; }
    }
    public class SetCheckPassDt
    {
        public string ManualPassReason { get; set; } = string.Empty;
        public Guid Id { get; set; }
    }
    public class ObtainOrCancelQCTaskDto
    {
        public Guid trialId { get; set; }
        public Guid subjectVisitId { get; set; }
        public bool obtaionOrCancel { get; set; }
    }
    public class ReadingClinicalDataSignIndto
    {
        /// 
        /// 阅片临床数据ID
        /// 
        public Guid ReadingClinicalDataId { get; set; }
        [NotDefault]
        public Guid TrialReadingCriterionId { get; set; }
        /// 
        /// 是否盲化
        /// 
        public bool? IsBlind { get; set; }
        /// 
        /// 是否完整
        /// 
        public bool? IsComplete { get; set; }
    }
    /// 
    /// 稽查泛型Dto
    /// 
    /// 泛型
    public class DataInspectionDto
    {
        public T Data { get; set; }
        public SignDTO? SignInfo { get; set; }
    }
    #region Qc
    public class DeleteStudyList
    {
        public Guid[] ids { get; set; }
        public Guid subjectVisitId { get; set; }
        public Guid trialId { get; set; }
    }
    #endregion
    #region 受试者
    public class InsSubjectCommand : InspectionBase, IInspectionDTO, ISignDTO
    {
        public SubjectCommand OptCommand { get; set; }
    }
    public class InsUpdateSubjectStatus : InspectionBase, IInspectionDTO, ISignDTO
    {
        public SubjectStatusChangeCommand OptCommand { get; set; }
    }
    public class InsDeleteSubjectDto : InspectionBase, IInspectionDTO, ISignDTO
    {
        public DeleteSubjectDto OptCommand { get; set; }
    }
    public class DeleteSubjectDto
    {
        public Guid SubjectId { get; set; }
        public Guid TrialId { get; set; }
        public Guid TrialSiteId { get; set; }
        public string Code { get; set; } = string.Empty;
    }
    #endregion
    /// 
    /// 用户 签名某个文档  Dto
    /// 
    public class TrialDocumentConfirmDTO : InspectionBase, IInspectionDTO, ISignDTO
    {
        public UserConfirmCommand OptCommand { get; set; }
    }
    public class GetDataInspectionOutDto : DataInspection
    {
        public string TrialReadingCriterionName { get; set; }
        public string BlindName { get; set; }
        public string TaskName { get; set; }
        //public string FirstName { get; set; } = string.Empty;
        //public string LastName { get; set; } = string.Empty;
        public string VisitName { get; set; } = string.Empty;
        //public string ParentJson { get; set; } = string.Empty;
        public string Description { get; set; } = string.Empty;
        public string DescriptionCN { get; set; } = string.Empty;
        public string ModuleTypeName { get; set; } = string.Empty;
        public string ModuleTypeNameCN { get; set; } = string.Empty;
        public string SignText { get; set; } = string.Empty;
        public decimal? VisitNum { get; set; }
        public bool? InPlan { get; set; }
        public string OptType { get; set; } = string.Empty;
        public string OptTypeCN { get; set; } = string.Empty;
        public Guid? FrontAuditConfigId { get; set; }
        /// 
        /// 父标识
        /// 
        public string ParentIdentification { get; set; }
        public string ExperimentName { get; set; }
        public string SiteCode { get; set; }
        public string ResearchProgramNo { get; set; }
        public string SiteName { get; set; }
        public string SubjectCode { get; set; }
        public string SubjectVisitName { get; set; }
    }
    public class UpdateTrialState
    {
        public Guid trialId { get; set; }
        public string trialStatusStr { get; set; }
        public string reason { get; set; }
    }
    public class AbandonTrial
    {
        public Guid trialId { get; set; }
        public bool isAbandon { get; set; }
    }
    public class GetDataInspectionDto : PageInput
    {
        /// 
        /// 项目iD
        /// 
        public Guid? TrialId { get; set; }
        /// 
        /// 中心
        /// 
        public Guid? TrialSiteId { get; set; }
        /// 
        /// 受试者
        /// 
        public string SubjectInfo { get; set; } = string.Empty;
        /// 
        /// 
        /// 
        public decimal? VisitPlanInfo { get; set; }
        /// 
        /// 开始时间
        /// 
        public DateTime? StartTime { get; set; }
        /// 
        /// 结束时间
        /// 
        public DateTime? EndTime { get; set; }
        /// 
        /// 功能模块
        /// 
        public Guid? ModuleType { get; set; }
        /// 
        /// Description
        /// 
        public string Description { get; set; } = string.Empty;
        /// 
        /// 操作人名称模糊查询
        /// 
        public string OpByUserName { get; set; } = string.Empty;
        public string? CreateUserName { get; set; }
        /// 
        /// 阅读片人
        /// 
        public string ReaderUser { get; set; } = string.Empty;
        /// 
        /// 角色
        /// 
		public string RoleName { get; set; } = string.Empty;
        /// 
        /// 是否有签名
        /// 
        public bool? IsSign { get; set; }
        /// 
        /// 批次Id
        /// 
        public Guid? BatchId { get; set; }
        public Guid? GeneralId { get; set; }
        public DateTime? RelationDeadlineTime { get; set; }
        public Guid? ObjectRelationParentId { get; set; }
        public Guid? TrialReadingCriterionId { get; set; }
        public string? TaskName { get; set; }
    }
    public class InspectionBase
    {
        public DataInspectionAddDTO AuditInfo { get; set; }
        public SignDTO SignInfo { get; set; } = new SignDTO();
    }
}