using DXApp.TemplateKitProject.Models;
using Microsoft.EntityFrameworkCore;

namespace DXApp.TemplateKitProject.Data;

public class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(options)
{
    public DbSet<ZugferdInvoice> ZugferdInvoices { get; set; }
    public DbSet<InvoiceAttachment> InvoiceAttachments { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<ZugferdInvoice>(entity =>
        {
            // Index für Performance-Optimierung der Rechnungsliste
            entity.HasIndex(e => e.ImportedAt)
                .HasDatabaseName("IX_ZugferdInvoices_ImportedAt");

            // Index für Duplikatprüfung
            entity.HasIndex(e => new { e.InvoiceNumber, e.SellerTaxId })
                .HasDatabaseName("IX_ZugferdInvoices_InvoiceNumber_SellerTaxId");

            // Decimal-Präzision explizit festlegen (behebt EF Core Warnung)
            entity.Property(e => e.TotalAmount)
                .HasColumnType("decimal(18,2)");

            entity.Property(e => e.TaxAmount)
                .HasColumnType("decimal(18,2)");

            // Relationship: One-to-Many mit InvoiceAttachments
            entity.HasMany(e => e.Attachments)
                .WithOne(a => a.ZugferdInvoice)
                .HasForeignKey(a => a.ZugferdInvoiceId)
                .OnDelete(DeleteBehavior.Cascade);
        });

        modelBuilder.Entity<InvoiceAttachment>(entity =>
        {
            // Index für schnelleres Laden der Attachments einer Rechnung
            entity.HasIndex(e => e.ZugferdInvoiceId)
                .HasDatabaseName("IX_InvoiceAttachments_ZugferdInvoiceId");
        });
    }
}