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

namespace Lada.Framework.Data.Mappings.EntityMappings.Identity
{
    public class PermissionMap : IEntityMappingConfiguration<Permission>
    {
        public void Map(EntityTypeBuilder<Permission> builder)
        {
            builder.HasKey(p => p.Id);
            builder.Property(p => p.Id).UseIdentityColumn(1);
            
            builder.Property(p => p.Name)
                .IsRequired()
                .HasMaxLength(256);
                
            builder.Property(p => p.Description)
                .HasMaxLength(512);
                
            builder.Property(p => p.IsActive)
                .IsRequired()
                .HasDefaultValue(true);

            // Quan hệ một-nhiều với User
            builder.HasMany(p => p.Users)
                .WithOne(u => u.Permission)
                .HasForeignKey(u => u.PermissionId)
                .OnDelete(DeleteBehavior.SetNull);

            // Quan hệ nhiều-nhiều với Role thông qua PermissionRole
            builder.HasMany(p => p.PermissionRoles)
                .WithOne(pr => pr.Permission)
                .HasForeignKey(pr => pr.PermissionId)
                .OnDelete(DeleteBehavior.Cascade);

            builder.ToTable("Permission");
        }
    }
}
