using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using AdsBillingService.Domain.AggregatesModel.InvoiceAggregate;

namespace AdsBillingService.Infrastructure.EntityConfigurations;

/// <summary>
/// EN: Entity configuration for InvoiceLineItem.
/// VI: Cấu hình entity cho InvoiceLineItem.
/// </summary>
public class InvoiceLineItemEntityTypeConfiguration : IEntityTypeConfiguration<InvoiceLineItem>
{
    public void Configure(EntityTypeBuilder<InvoiceLineItem> builder)
    {
        // EN: Table name / VI: Tên bảng
        builder.ToTable("invoice_line_items");

        // EN: Primary key / VI: Khóa chính
        builder.HasKey(li => li.Id);
        builder.Property(li => li.Id)
            .HasColumnName("id")
            .IsRequired();

        // EN: Invoice ID (foreign key) / VI: ID hóa đơn
        builder.Property<Guid>("InvoiceId")
            .HasColumnName("invoice_id")
            .IsRequired();

        builder.HasIndex("InvoiceId")
            .HasDatabaseName("ix_invoice_line_items_invoice_id");

        // EN: Campaign ID / VI: ID chiến dịch
        builder.Property(li => li.CampaignId)
            .HasColumnName("campaign_id")
            .IsRequired();

        // EN: Description / VI: Mô tả
        builder.Property(li => li.Description)
            .HasColumnName("description")
            .HasMaxLength(500)
            .IsRequired();

        // EN: Quantity / VI: Số lượng
        builder.Property(li => li.Quantity)
            .HasColumnName("quantity")
            .IsRequired();

        // EN: Unit price / VI: Đơn giá
        builder.Property(li => li.UnitPrice)
            .HasColumnName("unit_price")
            .HasColumnType("decimal(18,2)")
            .IsRequired();

        // EN: Total amount is computed / VI: Tổng tiền được tính toán
        builder.Ignore(li => li.TotalAmount);
    }
}
