using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using SolutionErp.Domain.ContractSigningPlans;

namespace SolutionErp.Infrastructure.Persistence.Configurations;

// [W1 Mig 69 — S161] File đính kèm phiếu Kế hoạch ký kết.
// Độ dài chuỗi theo spec §②-4 (`:134-137`): FileName 500 / StoragePath 1000 / ContentType 200
// — khuôn ProposalAttachmentConfiguration.cs:15-17 (RỘNG hơn PE 255/500/100 vì PE là bản cũ).
//
// FK Cascade Plan = đường cascade DUY NHẤT. `ContractSigningPlanDossierItemId` CỐ Ý chỉ
// HasIndex, KHÔNG FK vật lý — khuôn PurchaseEvaluationAttachmentConfiguration
// (`PurchaseEvaluationConfiguration.cs:199-200` chỉ HasIndex cho SupplierId):
// Plan→DossierItem→Attachment + Plan→Attachment cùng Cascade = MULTIPLE CASCADE PATHS,
// SQL Server từ chối tạo bảng.
public class ContractSigningPlanAttachmentConfiguration
    : IEntityTypeConfiguration<ContractSigningPlanAttachment>
{
    public void Configure(EntityTypeBuilder<ContractSigningPlanAttachment> b)
    {
        b.ToTable("ContractSigningPlanAttachments");
        b.HasKey(x => x.Id);

        b.Property(x => x.FileName).HasMaxLength(500).IsRequired();
        b.Property(x => x.StoragePath).HasMaxLength(1000).IsRequired();
        b.Property(x => x.ContentType).HasMaxLength(200).IsRequired();
        b.Property(x => x.Purpose).HasConversion<int>();
        b.Property(x => x.Note).HasMaxLength(1000);

        b.HasIndex(x => x.ContractSigningPlanId);
        b.HasIndex(x => x.ContractSigningPlanDossierItemId);

        b.HasOne(x => x.ContractSigningPlan)
            .WithMany(p => p.Attachments)
            .HasForeignKey(x => x.ContractSigningPlanId)
            .OnDelete(DeleteBehavior.Cascade);

        b.HasQueryFilter(x => !x.IsDeleted);
    }
}
