namespace Inspectron.Epson.PrintServer.Printers.Utils.FinalRecipe;

public class FinalReceipt
{
    public string CompanyName { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string Phone { get; set; }
    public string? ReceiptNumber { get; set; }
    public DateTime DateTime { get; set; }
    public int Guests { get; set; }
    public List<FinalReceiptItem> Items { get; set; } = new List<FinalReceiptItem>();
    public decimal Total { get; set; }
    public string Currency { get; set; }
    public decimal? TotalInAlternateCurrency { get; set; }
    public string AlternateCurrency { get; set; }
    public List<SplitPaymentInfo> SplitPayments { get; set; } = new List<SplitPaymentInfo>();
    public string PaymentMethod { get; set; }
    public decimal PaymentAmount { get; set; }
    public List<TaxInfo> TaxBreakdown { get; set; } = new List<TaxInfo>();
    public bool IsDebtor { get; set; } = false;
    public string WaiterName { get; set; }
    public string Terminal { get; set; }
    public string TableNumber { get; set; }
    public string VatNumber { get; set; }
    public string ThankYouMessage { get; set; }
    public string GoodbyeMessageLine1 { get; set; }
    public string GoodbyeMessageLine2 { get; set; }
    public List<PaymentTerminalReceipt> TerminalReceipts { get; set; } = new List<PaymentTerminalReceipt>();
    public DiscountInfo? DiscountInfo { get; set; }
}

public class DiscountInfo
{
    public string Description { get; set; }
    public decimal Amount { get; set; }
    public string Currency { get; set; }
    
}

public class FinalReceiptItem
{
    public int Quantity { get; set; }
    public string Description { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal TotalPrice { get; set; }
    public string TaxCategory { get; set; }
    public List<string> SubItems { get; set; }
}

public class TaxInfo
{
    public string Category { get; set; }
    public decimal Rate { get; set; }
    public decimal Gross { get; set; }
    public decimal Net { get; set; }
    public decimal TaxAmount { get; set; }
    public string Currency { get; set; }
}

public class SplitPaymentInfo
{
    public string PaymentMethod { get; set; }
    public decimal Amount { get; set; }
    public string Currency { get; set; }
}

public class PaymentTerminalReceipt
{
    public string ReceiptType { get; set; } // e.g., "*** Kundenbeleg ***"
    public string BookingType { get; set; } // e.g., "Buchung"
    public string PaymentSystem { get; set; } // e.g., "TWINT"
    public string TransactionNumber { get; set; }
    public DateTime TransactionDateTime { get; set; }
    public string TerminalId { get; set; }
    public string AID { get; set; }
    public string TransactionSeqCount { get; set; }
    public string TransactionRefNo { get; set; }
    public string AuthCode { get; set; }
    public string AcquirerId { get; set; }
    public decimal EftAmount { get; set; }
    public decimal TipAmount { get; set; }
    public decimal TotalEftAmount { get; set; }
    public string Currency { get; set; }
}