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

namespace TechHelper.Context.Configuration
{
	public class AssignmentAttachmentConfiguration : IEntityTypeConfiguration<ExamAttachment>
	{
		public void Configure(EntityTypeBuilder<ExamAttachment> builder)
		{
			builder.ToTable("assignment_attachments");

			builder.HasKey(aa => aa.Id);

			builder.Property(aa => aa.Id)
				.HasColumnName("id");

			builder.Property(aa => aa.AssignmentId)
				.HasColumnName("assignment_id")
				.IsRequired();

			builder.Property(aa => aa.FilePath)
				.HasColumnName("file_path")
				.IsRequired()
				.HasMaxLength(255);

			builder.Property(aa => aa.FileName)
				.HasColumnName("file_name")
				.IsRequired()
				.HasMaxLength(255);

			builder.Property(aa => aa.UploadedAt)
				.HasColumnName("uploaded_at")
				.ValueGeneratedOnAdd(); // Set value on creation

			builder.Property(aa => aa.IsDeleted)
				.HasColumnName("deleted")
				.HasDefaultValue(false);

			// Configure the relationship explicitly
			builder.HasOne(aa => aa.Exam) // An AssignmentAttachment has one Assignment
				   .WithMany(a => a.ExamAttachments) // An Assignment has many AssignmentAttachments (assuming 'Attachments' collection in Assignment)
				   .HasForeignKey(aa => aa.AssignmentId) // The foreign key is AssignmentAttachment.AssignmentId
				   .IsRequired() // It's a required relationship based on your [Required] attribute
				   .OnDelete(DeleteBehavior.Cascade); // If an Assignment is deleted, its attachments should also be deleted
		}
	}
}
