using Lada.Framework.Data.Domains.Settings;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace Lada.Framework.Data.Mappings.EntityMappings.Settings
{
    public class CallPathMap : IEntityMappingConfiguration<CallPath>
    {
        public void Map(EntityTypeBuilder<CallPath> builder)
        {
            // Tên bảng
            builder.ToTable("CallPaths");

            // Khóa chính
            builder.HasKey(x => x.Id);

            // Cấu hình các cột
            builder.Property(x => x.Name)
                .IsRequired()
                .HasMaxLength(255);

            builder.Property(x => x.RelativePath)
                .IsRequired()
                .HasMaxLength(1000);

            builder.Property(x => x.CallPathVersionId)
                .IsRequired();

            builder.Property(x => x.Description)
                .HasMaxLength(2000);

            // Cấu hình quan hệ
            builder.HasOne(x => x.CallPathVersion)
                .WithMany(x => x.CallPaths)
                .HasForeignKey(x => x.CallPathVersionId)
                .OnDelete(DeleteBehavior.Cascade);

            // Index
            builder.HasIndex(x => x.Name).IsUnique();
            builder.HasIndex(x => new { x.RelativePath, x.CallPathVersionId }).IsUnique();
        }
    }
}
