#import "templates/tmpl_letter.typ": tmpl_letter
#import "templates/common.typ": colors, money
#import "@preview/cades:0.3.0": qr-code
#let config = yaml("rechnung.yml")

#show: doc => tmpl_letter(
  title: (
    invoice: "Rechnung",
    offer: "Angebot",
    estimate: "Kostenvoranschlag",
    internal: "Eigenbeleg"
  ).at(config.type),
  address: config.address,
  info: [
    Datum: #config.date \
    #if config.type != "internal" [
      Kunden-Nr.: #config.customer_no \
    ]
    #if config.type == "invoice" [
      Rechnungs-Nr.: #config.invoice_no \
    ] else if config.type == "offer" [
      Angebots-Nr.: #config.invoice_no \
    ]
  ],
  footer: [
    #if config.type == "invoice" [
      Vielen Dank für deine Bestellung! \
    ] else if config.type == "estimate" or config.type == "offer" [
      Wir freuen uns auf deine Bestellung! \
    ] else if config.type == "internal" [
      *Grund für Eigenbeleg:* \
      #config.internal_reason
    ]
    
    #text(size: 0.7em, fill: colors.subtext)[
      #if config.type == "invoice" [
        Gesamtbetrag fällig in 10 Tagen ab Rechnungserhalt. \
        Für überfällige Zahlungen wird eine Bearbeitungsgebühr von min. 5 % pro Monat berechnet.
      ] else if config.type == "offer" [
        Dieses Angebot ist für einen Monat gültig.
      ] else if config.type == "estimate" [
        Dieser Kostenvoranschlag ist unverbindlich.
      ]
    ]
  ],
  doc,
)


#if config.type == "invoice" [
  Bitte nutze deine Rechnungs-Nr. als Verwendungszweck für die Überweisung!
]
#table(
  columns: (auto, 1fr, auto, auto, auto ,auto),
  fill: (_, row) => if row == 0 { colors.highlight } else { white },
  stroke: 0.1pt + colors.subtext,
  [*Pos.*],
  [*Beschreibung*],
  [*Stück*],
  [*Einzelpreis*],
  [*Rabatt*],
  [*Betrag*],
  ..config.entries.enumerate().map(e => (
    e.at(0)+1, 
    e.at(1).description,
    e.at(1).pieces,
    money(e.at(1).price),
    money(e.at(1).sale),
    money(e.at(1).pieces * e.at(1).price - e.at(1).sale),
  )).flatten().map(e => [#e]),
)

#align(right)[
  #pad(x:1em)[
    *Gesamtbetrag: #money(config.entries.map(e => e.pieces * e.price - e.sale).sum())*
  ]
]

#if config.type == "invoice" [
  #v(1em)
  #align(right)[
    #block(
      stroke: 1pt,
      inset: 1em,
      radius: 1em
    )[
      #qr-code("BCD\n002\n1\nSCT\n\nswablab e.V.\nDE12642624080125634005\nEUR" + str(config.entries.map(e => e.pieces * e.price - e.sale).sum()) + "\nGDDS\n\nRechnung " + str(config.invoice_no) + "\nswablab Rechnung", width: 2cm)
      
      #place(center+bottom, dy: 1.1em)[
        #block(width: 100%+0.75em, fill: white)[
          #text(size: 8pt)[
            Zahlen mit Code
          ]
        ]
      ]
    ]
  ]
]