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

namespace Lada.Framework.Data.Mappings.EntityMappings.Finances
{
    public class ExpenseCategoryMap : IEntityMappingConfiguration<ExpenseCategory>
    {
        public void Map(EntityTypeBuilder<ExpenseCategory> builder)
        {
            builder.HasKey(a => a.Id);

            builder.Property(c => c.Name)
            .IsRequired()
            .HasMaxLength(256);

            builder.Property(c => c.Description)
                .HasMaxLength(1024);

            builder.Property(x => x.ParentId)
                .HasComment("ID của danh mục cha (null nếu là danh mục gốc)");

            builder.Property(x => x.ApprovedBy)
                .IsRequired()
                .HasComment("UserId của người duyệt mặc định cho loại chi phí này");

            builder.Property(x => x.AccountCode)
                .HasMaxLength(50)
                .HasComment("Mã tài khoản");

            // Cấu hình self-referencing relationship
            builder.HasOne(x => x.Parent)
                .WithMany(x => x.Children)
                .HasForeignKey(x => x.ParentId)
                .OnDelete(DeleteBehavior.Restrict); // Không cho phép xóa danh mục cha nếu còn danh mục con

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