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

namespace Lada.Framework.Data.Mappings.EntityMappings.Finances
{
    public class ExpenseHistoryMap : IEntityMappingConfiguration<ExpenseHistory>
    {
        public void Map(EntityTypeBuilder<ExpenseHistory> b)
        {
            b.ToTable("ExpenseHistories");

            b.HasKey(x => x.Id);

            b.Property(x => x.ExpenseId)
                .IsRequired()
                .HasComment("ID của chi phí");

            b.Property(x => x.OldStatus)
                .IsRequired(false)
                .HasComment("Trạng thái trước khi thay đổi (null nếu là tạo mới)");

            b.Property(x => x.NewStatus)
                .IsRequired()
                .HasComment("Trạng thái sau khi thay đổi");

            b.Property(x => x.Reason)
                .HasMaxLength(1000)
                .HasComment("Lý do từ chối (nếu có)");

            b.Property(x => x.Note)
                .HasMaxLength(500)
                .HasComment("Ghi chú");

            // Relationship với Expense (Many:1)
            b.HasOne(x => x.Expense)
                .WithMany()
                .HasForeignKey(x => x.ExpenseId)
                .OnDelete(DeleteBehavior.Cascade);

            // Index
            b.HasIndex(x => x.ExpenseId)
                .HasDatabaseName("IX_ExpenseHistories_ExpenseId");

            b.HasIndex(x => x.CreatedTime)
                .HasDatabaseName("IX_ExpenseHistories_CreatedTime");

            b.HasIndex(x => new { x.ExpenseId, x.CreatedTime })
                .HasDatabaseName("IX_ExpenseHistories_ExpenseId_CreatedTime");
        }
    }
}