// Rundet auf Cent und verhindert einen negativen Endbetrag, falls ein
// Rabatt (versehentlich) größer als der vereinbarte Preis ist.
export function getPayableAmount(baseAmount: number, discountAmount: number): number {
  return Math.max(0, Math.round((baseAmount - (discountAmount || 0)) * 100) / 100);
}

export function computeDiscountAmount(type: "percent" | "fixed", value: number, baseAmount: number): number {
  const raw = type === "percent" ? (baseAmount * value) / 100 : value;
  return Math.min(Math.max(0, Math.round(raw * 100) / 100), baseAmount);
}

// Code-Rabatt und manueller Rabatt sind additiv, aber getrennt gespeichert
// (siehe Order-Model) — überall dort, wo der tatsächlich zu zahlende Betrag
// berechnet wird, müssen beide zusammengezählt werden.
export function getTotalOrderDiscount(order: { discountAmount?: number; manualDiscountAmount?: number }): number {
  return (order.discountAmount || 0) + (order.manualDiscountAmount || 0);
}
