namespace Books.Api.Reporting;

/// <summary>
/// VAT (Moms) report data for SKAT compliance.
/// Contains SKAT boxes A-D for VAT amounts and basis fields 1-4 for turnover.
/// </summary>
public class VatReportDto
{
    // SKAT VAT boxes (Momsbeløb)
    /// <summary>Rubrik A: Salgsmoms (Output VAT from domestic sales at 25%)</summary>
    public decimal BoxA { get; set; }

    /// <summary>Rubrik B: Købsmoms (Input VAT deduction from purchases at 25%)</summary>
    public decimal BoxB { get; set; }

    /// <summary>Rubrik C: EU-varekøb moms (VAT on goods purchased from EU - reverse charge)</summary>
    public decimal BoxC { get; set; }

    /// <summary>Rubrik D: Ydelseskøb moms (VAT on services purchased from abroad - reverse charge)</summary>
    public decimal BoxD { get; set; }

    // Basis/turnover fields (Omsætning)
    /// <summary>Felt 1: Salg med moms (Turnover with VAT - domestic sales)</summary>
    public decimal Basis1 { get; set; }

    /// <summary>Felt 2: Salg uden moms (Turnover without VAT - exports, exempt)</summary>
    public decimal Basis2 { get; set; }

    /// <summary>Felt 3: EU-varekøb (Purchases of goods from EU)</summary>
    public decimal Basis3 { get; set; }

    /// <summary>Felt 4: Ydelseskøb fra udland (Purchases of services from abroad)</summary>
    public decimal Basis4 { get; set; }

    // Summary calculations
    /// <summary>Total output VAT (A + C + D)</summary>
    public decimal TotalOutputVat { get; set; }

    /// <summary>Total input VAT (B - deductible)</summary>
    public decimal TotalInputVat { get; set; }

    /// <summary>Net VAT (TotalOutputVat - TotalInputVat). Positive = payment to SKAT, Negative = refund</summary>
    public decimal NetVat { get; set; }

    // Period info
    /// <summary>Start date of the VAT period</summary>
    public DateOnly PeriodStart { get; set; }

    /// <summary>End date of the VAT period</summary>
    public DateOnly PeriodEnd { get; set; }

    /// <summary>Number of transactions with VAT in the period</summary>
    public int TransactionCount { get; set; }
}
