using Entities.Contracts;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore;

namespace TechHelper.Context.Configuration
{
	public class AssignmentClassConfiguration : IEntityTypeConfiguration<ExamClass>
	{
		public void Configure(EntityTypeBuilder<ExamClass> builder)
		{
			// 设置表名为 "assignment_class"
			builder.ToTable("assignment_class");

			// 设置复合主键
			builder.HasKey(ac => new { ac.ExamId, ac.ClassId });

			// 配置 AssignmentId 列名
			builder.Property(ac => ac.ExamId)
				.HasColumnName("assignment_id");

			// 配置 ClassId 列名
			builder.Property(ac => ac.ClassId)
				.HasColumnName("class_id");

			// 配置 AssignedAt 列名
			builder.Property(ac => ac.AssignedAt)
				.HasColumnName("assigned_at")
				.IsRequired(); // 通常时间字段不能为空

			// 配置 IsDeleted 列名
			builder.Property(ac => ac.IsDeleted)
				.HasColumnName("deleted")
				.HasDefaultValue(false); // 可以设置默认值，表示默认未删除

			// 配置到 Assignment 的关系 (多对一)
			// 假设 Assignment 类中有一个名为 AssignmentClasses 的集合属性
			builder.HasOne(ac => ac.Exam) // AssignmentClass 有一个 Assignment
				.WithMany(a => a.AssignmentClasses) // Assignment 有多个 AssignmentClass 记录
				.HasForeignKey(ac => ac.ExamId) // 通过 AssignmentId 建立外键
				.OnDelete(DeleteBehavior.Cascade); // 当 Assignment 被删除时，相关的 AssignmentClass 记录也级联删除

			// 配置到 Class 的关系 (多对一)
			// 假设 Class 类中有一个名为 AssignmentClasses 的集合属性
			builder.HasOne(ac => ac.Class) // AssignmentClass 有一个 Class
				.WithMany(c => c.ExamClasses) // Class 有多个 AssignmentClass 记录
				.HasForeignKey(ac => ac.ClassId) // 通过 ClassId 建立外键
				.OnDelete(DeleteBehavior.Cascade); // 当 Class 被删除时，相关的 AssignmentClass 记录也级联删除
		}
	}
}
