using IRaCIS.Core.Domain.Share;
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
{
	public class ReadingTableQuestionSystemView
	{
		public Guid Id { get; set; }
		public Guid ReadingQuestionId { get; set; }
		public string Type { get; set; }
		public Guid? ParentId { get; set; }
		public string ParentTriggerValue { get; set; }
		public string QuestionName { get; set; }
		public int IsRequired { get; set; }
		public int ShowOrder { get; set; }
		public string TypeValue { get; set; }
		public bool IsEnable { get; set; }
		public DateTime CreateTime { get; set; }
		public Guid CreateUserId { get; set; }
		public string Remark { get; set; }
		public Guid? RelevanceId { get; set; }
		public string RelevanceValue { get; set; }
		public int ShowQuestion { get; set; }
		public int? MaxRowCount { get; set; }
		public string DataTableName { get; set; }
		public string DataTableColumn { get; set; }

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


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

	
	public class ReadingTableQuestionSystemQuery
	{


		public Guid ReadingQuestionId { get; set; }

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

	}

	///<summary> ReadingTableQuestionSystemAddOrEdit  列表查询参数模型</summary>
	public class ReadingTableQuestionSystemAddOrEdit
	{
		public Guid? Id { get; set; }
		public Guid ReadingQuestionId { get; set; }
		public string Type { get; set; }
		public Guid? ParentId { get; set; }
		public string ParentTriggerValue { get; set; }
		public string QuestionName { get; set; }
		public int IsRequired { get; set; }
		public int ShowOrder { get; set; }
		public string TypeValue { get; set; }
		public bool IsEnable { get; set; }
		public DateTime CreateTime { get; set; }
		public Guid CreateUserId { get; set; }
		public string Remark { get; set; }
		public Guid? RelevanceId { get; set; }
		public string RelevanceValue { get; set; }
		public int ShowQuestion { get; set; }
		public int? MaxRowCount { get; set; }
		public string DataTableName { get; set; }
		public string DataTableColumn { get; set; }

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

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



	}

	public class ReadingCriterionPageView
	{
		public Guid Id { get; set; }
		public Guid TrialId { get; set; }
		public string PageName { get; set; }
		public bool IsEnable { get; set; }
		
	}

	
	public class ReadingCriterionPageQuery
	{
		///<summary> PageName</summary>
		public string PageName { get; set; }

	}

	public class SetTrialJudgyInfoInDto : GetTrialJudgyInfoOutDto
	{
		
	}

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

		public bool IsReadingTaskViewInOrder { get; set; }

		/// <summary>
		/// 仲裁阅片
		/// </summary>
		public bool? IsArbitrationReading { get; set; }

		/// <summary>
		/// 仲裁规则
		/// </summary>
		public ArbitrationRule ArbitrationRule { get; set; }
	}

	public enum NeedSynchronize
	{
		/// <summary>
		/// 需要
		/// </summary>
		Need=0,

		/// <summary>
		/// 不需要
		/// </summary>
		NotNeed = 1,

		/// <summary>
		/// 裁判不相等
		/// </summary>
		JudgeNotEqual=2,

	}

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

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


	public class ReadingCriterionPageAddOrEdit
	{
		public Guid? Id { get; set; }
		public Guid TrialId { get; set; }
		public string PageName { get; set; }
		public bool IsEnable { get; set; }

		public int ShowOrder { get; set; } = 0;
		public Guid ReadingQuestionCriterionTrialId{ get; set; }

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

	}


	public class AddOrUpdateReadingQuestionCriterionTrialInDto
	{
		public Guid? Id { get; set; }

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

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

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

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

		/// <summary>
		/// 表单类型
		/// </summary>

		public FormType FormType { get; set; }


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

	}


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

	public class AddOrUpdateReadingQuestionCriterionSystemInDto
    {
		public Guid? Id { get; set; }

		/// <summary>
		/// 标准ID
		/// </summary>
		public Guid CriterionId { get; set; }

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

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

	/// <summary>
	/// 
	/// </summary>
	public class ReadingQuestionCriterionSystemViewInDto:PageInput
	{
		public string CriterionName { get; set; }=String.Empty;
	}

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

		public string Value { get; set; }

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

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

	
		public bool IsEnable { get; set; }
	}

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


		public bool IsCompleteConfig { get; set; }
	}

	/// <summary>
	/// 
	/// </summary>
	public class ReadingQuestionCriterionTrialViewInDto : PageInput
	{
		[NotDefault]
		public Guid TrialId { get; set; }

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

	}


	public class ReadingQuestionTrialView
	{

		public Guid Id { get; set; }

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

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

		public Guid TrialId { get; set; }

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

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

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

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

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

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

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

		public bool IsEnable { get; set; }

		public string ParentQuestionName { get; set; }

		public int? ParentQuestionShowOrder { get; set; }

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

		/// <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;

		public int? RelevanceShowOrder { get; set; }

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

		public string ParentQuestionName { get; set; }

		public int? ParentQuestionShowOrder { get; set; }

		public int? RelevanceShowOrder { get; set; }


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

		//public bool IsEnable { get; set; }

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

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


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

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


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


	public class ReadingQuestionTrialViewInDto
	{
		/// <summary>
		/// 系统标准Id
		/// </summary>
		[NotDefault]
		public Guid ReadingQuestionCriterionTrialId { get; set; }

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


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



		public Guid? ReadingCriterionPageId { get; set; }
	}

	/// <summary>
	/// 获取其他问题返回的Dto
	/// </summary>
	public class CriterionOtherQuestionOutDto
	{
		public Guid QuestionId { get; set; }

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

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

		public string GroupName { get; set; }
	}

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

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




	public class GetTrialGroupNameListInDto
	{
		/// <summary>
		/// 标准ID
		/// </summary>
		public Guid CriterionId { get; set; }


		public Guid? ReadingCriterionPageId { get; set; }
	}


	public class GetReadingTableOtherQuestionSystemInDto
	{
		/// <summary>
		/// 表格父问题的ID
		/// </summary>
		[NotDefault]
		public Guid ReadingQuestionId { get; set; }

		/// <summary>
		/// 当前ID
		/// </summary>
		public Guid? Id { get; set; }
	}

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

		/// <summary>
		/// 当前ID
		/// </summary>
		public Guid? Id { get; set; }

		public Guid? ReadingCriterionPageId { get; set; }
	}

	public class GetSystemCriterionOtherQuestionInDto
	{
		[NotDefault]
		public Guid ReadingQuestionCriterionSystemId { get; set; }

		/// <summary>
		/// 当前ID
		/// </summary>
		public Guid? Id { get; set; }
	}

	public class ReadingQuestionSystemViewInDto : PageInput
	{
		/// <summary>
		/// 系统标准Id
		/// </summary>
		[NotDefault]
		public Guid ReadingQuestionCriterionSystemId { get; set; }

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

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

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

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

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

		/// <summary>
		/// 系统问题ID
		/// </summary>
		public Guid? ReadingQuestionSystemId { get; set; }

		public Guid? ReadingCriterionPageId { get; set; }

		/// <summary>
		/// 系统标准的ParentId
		/// </summary>
		public Guid? SystemParentId { 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>
		/// 关联ID
		/// </summary>
		public Guid? RelevanceId { get; set; }

		/// <summary>
		/// 关联Value
		/// </summary>
		public string RelevanceValue { get; set; } = string.Empty;
		/// <summary>
		/// 图片数量
		/// </summary>
		public int ImageCount { get; set; } 
	}
	public class AddOrUpdateReadingQuestionSystemInDto
	{

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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



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


		public Guid TrialId { get; set; }

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

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

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


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


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

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

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

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

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

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


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

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

		/// <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; } = 0;

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

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

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


	public class ReadingQuestionCriterionSystemView
	{
		/// <summary>
		/// 返回的对象
		/// </summary>
		public Guid Id { get; set; }

		/// <summary>
		/// 标准ID
		/// </summary>
		public Guid CriterionId { get; set; }

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

		public int ShowOrder { get; set; }

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

		/// <summary>
		/// 是否完成配置
		/// </summary>
		public bool IsCompleteConfig { get; set; }

		public int QuestionCount { get; set; }

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


	public class ReadingQuestionCriterionTrialView
	{
		/// <summary>
		/// 返回的对象
		/// </summary>
		public Guid Id { get; set; }

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

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

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

		/// <summary>
		/// 是否完成配置
		/// </summary>
		public bool IsCompleteConfig { get; set; }

		public int QuestionCount { get; set; }

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

		/// <summary>
		/// 表单类型
		/// </summary>

		public FormType FormType { get; set; }


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


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





		/// <summary>
		/// 是否是系统数据
		/// </summary>
		public bool IsSystemData 
		{
			get 
			{
				return this.ReadingQuestionCriterionSystemId != null;
			}
		}
	}
}