#!/bin/bash

# Zielcodepage. WE8MSWIN1252 ist ein Oracle-spezifischer Name.
# Der standardisierte IANA-Name für diese Codepage, der von iconv verstanden wird, ist WINDOWS-1252.
TARGET_CODEPAGE="WINDOWS-1252"

# Feldtrennzeichen
FS='#'

# Definiere Variablen für die Felder, initial leer
BELEG=""
ART=""
MAN_NR=""
ANW_NR=""
HHST=""
BUCHSCHL=""
BETRAG=""
FAELTERM=""
BLZ=""
KONTO_NR=""
VORNAME=""
NAME=""
ZAHLGRUND=""
ZAHLUNGSART=""
BELEGART=""
KOSTELLE=""
KOTRAEGER=""
KOART=""
DATUM=""
ANO_NR=""
MITTEIL=""
HKOSTELLE=""
HKOART=""
MENGE=""
PROJEKT=""
MWST_BETRAG=""
MWST_PROZ=""
ARCHIV_NR=""
PLZ=""
ORT=""
STRASSE=""
ADR_ID=""
SACHKONTO=""
KOSTENSTELLE=""
KOSTENART=""
BIC=""
IBAN=""
BUCHUNGSKREIS=""
KONTO_FINRE=""
JAHR=""
MWST_MONAT=""
MWST_JAHR=""
SAMMELBELEG=""
ERLAEUT=""
RECHNUNGS_NR=""

# Funktion zur Anzeige der Hilfe
usage() {
  echo "Verwendung: $0 [OPTIONEN]" >&2
  echo "Optionen:" >&2
  echo "  -b, --beleg <Belegnummer>             Belegnummer (NUMBER(8), Pflicht)" >&2
  echo "  -a, --art <Satzart>                   Satzart (VARCHAR2(1), Pflicht, Werte: 1, 2, 3, 9)" >&2
  echo "  -m, --mandantennummer <Mandantennummer> Mandantennummer (NUMBER(3), Pflicht)" >&2
  echo "  -n, --anwendernummer <Anwendernummer>   Anwendernummer (NUMBER(2), Pflicht)" >&2
  echo "  -h, --haushaltsstelle <Haushaltsstelle> Haushaltsstelle (NUMBER(10), Pflicht)" >&2
  echo "  -k, --buchungsschluessel <Buchungsschlüssel> Buchungsschlüssel (NUMBER(2), Pflicht, Werte: 1, 4, 5, 8, 9)" >&2
  echo "  -g, --betrag <Betrag>                 Betrag (NUMBER(13,2), Pflicht)" >&2
  echo "  -l, --belegart <Belegart>             Belegart (VARCHAR2(1), Pflicht, Werte: 0, 1, 3, 9)" >&2
  echo "  -f, --faelterm <Fälligkeit>           Fälligkeit (DATE, Format: TTMMJJJJ, Pflicht)" >&2
  echo "  -z, --bankleitzahl <Bankleitzahl>     Bankleitzahl (NUMBER(8))" >&2
  echo "  -o, --kontonummer <Kontonummer>       Kontonummer (NUMBER(10))" >&2
  echo "  -v, --vorname <Vorname>               Vorname (VARCHAR2(30))" >&2
  echo "  -w, --name <Name>                     Name (VARCHAR2(30), Pflicht)" >&2
  echo "  -r, --zahlungsgrund <Zahlungsgrund>   Zahlungsgrund (VARCHAR2(135), Pflicht)" >&2
  echo "  -y, --zahlungsart <Zahlungsart>       Zahlungsart (NUMBER(2))" >&2
  echo "  -s, --unterkostenstelle <Unterkostenstelle> Unterkostenstelle (NUMBER(3))" >&2
  echo "  -t, --kostentraeger <Kostenträger>    Kostenträger/Produkt (NUMBER(8))" >&2
  echo "  -i, --unterkostenart <Unterkostenart> Unterkostenart (NUMBER(3))" >&2
  echo "  -d, --datum <Datum>                   Zuordnungsdatum (Monat/Jahr) (NUMBER(6), Format: MMJJJJ)" >&2
  echo "  -p, --anordnungsnummer <Anordnungsnummer> Anordnungsnummer (NUMBER(8))" >&2
  echo "  -c, --mitteilung <Mitteilung>         Mitteilung (VARCHAR2(135))" >&2
  echo "  -j, --hauptkostenstelle <Hauptkostenstelle> Hauptkostenstelle (NUMBER(5))" >&2
  echo "  -x, --hauptkostenart <Hauptkostenart> Hauptkostenart (NUMBER(5))" >&2
  echo "  -q, --menge <Menge>                   Menge (NUMBER(13,2))" >&2
  echo "  -P, --projekt <Projekt>               Projekt (VARCHAR2(12))" >&2
  echo "  -M, --mwst_betrag <MwSt-Betrag>       Betrag der Mehrwertsteuer (NUMBER(13,2))" >&2
  echo "  -Q, --mwst_proz <MwSt-Prozentsatz>    Prozentsatz der Mehrwertsteuer (NUMBER(4,2))" >&2
  echo "  -A, --archiv_nr <Archivnummer>        Archivnummer (VARCHAR2(10))" >&2
  echo "  -L, --postleitzahl <Postleitzahl>     Postleitzahl (VARCHAR2(6))" >&2
  echo "  -O, --ort <Ort>                       Ort (VARCHAR2(30))" >&2
  echo "  -S, --strasse <Strasse>               Strasse (VARCHAR2(30))" >&2
  echo "  -I, --adr_id <Adress-ID>              Identifikationsnummer der Adresse (NUMBER(8), Pflicht)" >&2
  echo "  -X, --sachkonto <Sachkonto>           Sachkonto (NUMBER(8))" >&2
  echo "  -K, --kostenstelle <Kostenstelle>     Kostenstelle (NUMBER(8))" >&2
  echo "  -E, --kostenart <Kostenart>           Kostenart (NUMBER(8))" >&2
  echo "  -B, --bic <BIC>                       BIC (VARCHAR(11))" >&2
  echo "  -N, --iban <IBAN>                     IBAN (VARCHAR(34))" >&2
  echo "  -C, --buchungskreis <Buchungskreis>   Buchungskreis (VARCHAR2(1), Werte: B,S,H)" >&2
  echo "  -F, --konto_finre <Finanzrechnungskonto> Finanzrechnungskonto (NUMBER(8))" >&2
  echo "  -J, --jahr <Haushaltsjahr>            Haushaltsjahr (NUMBER(4))" >&2
  echo "  -U, --mwst_monat <MwSt-Monat>         Mehrwertsteuerperiode Monat (NUMBER(2))" >&2
  echo "  -Y, --mwst_jahr <MwSt-Jahr>           Mehrwertsteuerperiode Jahr (NUMBER(4))" >&2
  echo "  -D, --sammelbeleg <Sammelbelegnummer> Sammelbelegnummer (NUMBER(10))" >&2
  echo "  -R, --erlaeut <Erläuterungen>         Erläuterungen (CLOB)" >&2
  echo "  -V, --rechnungs_nr <Rechnungsnummer>  Rechnungsnummer aus dem Fremdverfahren (VARCHAR2(60))" >&2
  exit 1
}

# Command Line Options
while [[ $# -gt 0 ]]; do
  key="$1"
  case $key in
    -b|--beleg) BELEG="$2"; shift; shift;;
    -a|--art) ART="$2"; shift; shift;;
    -m|--mandantennummer) MAN_NR="$2"; shift; shift;;
    -n|--anwendernummer) ANW_NR="$2"; shift; shift;;
    -h|--haushaltsstelle) HHST="$2"; shift; shift;;
    -k|--buchungsschluessel) BUCHSCHL="$2"; shift; shift;;
    -g|--betrag) BETRAG="$2"; shift; shift;;
    -f|--faelterm) FAELTERM="$2"; shift; shift;;
    -z|--bankleitzahl) BLZ="$2"; shift; shift;;
    -o|--kontonummer) KONTO_NR="$2"; shift; shift;;
    -v|--vorname) VORNAME="$2"; shift; shift;;
    -w|--name) NAME="$2"; shift; shift;;
    -r|--zahlungsgrund) ZAHLGRUND="$2"; shift; shift;;
    -y|--zahlungsart) ZAHLUNGSART="$2"; shift; shift;;
    -l|--belegart) BELEGART="$2"; shift; shift;;
    -s|--unterkostenstelle) KOSTELLE="$2"; shift; shift;;
    -t|--kostentraeger) KOTRAEGER="$2"; shift; shift;;
    -i|--unterkostenart) KOART="$2"; shift; shift;;
    -d|--datum) DATUM="$2"; shift; shift;;
    -p|--anordnungsnummer) ANO_NR="$2"; shift; shift;;
    -c|--mitteilung) MITTEIL="$2"; shift; shift;;
    -j|--hauptkostenstelle) HKOSTELLE="$2"; shift; shift;;
    -x|--hauptkostenart) HKOART="$2"; shift; shift;;
    -q|--menge) MENGE="$2"; shift; shift;;
    -P|--projekt) PROJEKT="$2"; shift; shift;;
    -M|--mwst_betrag) MWST_BETRAG="$2"; shift; shift;;
    -Q|--mwst_proz) MWST_PROZ="$2"; shift; shift;;
    -A|--archiv_nr) ARCHIV_NR="$2"; shift; shift;;
    -L|--postleitzahl) PLZ="$2"; shift; shift;;
    -O|--ort) ORT="$2"; shift; shift;;
    -S|--strasse) STRASSE="$2"; shift; shift;;
    -I|--adr_id) ADR_ID="$2"; shift; shift;;
    -X|--sachkonto) SACHKONTO="$2"; shift; shift;;
    -K|--kostenstelle) KOSTENSTELLE="$2"; shift; shift;;
    -E|--kostenart) KOSTENART="$2"; shift; shift;;
    -B|--bic) BIC="$2"; shift; shift;;
    -N|--iban) IBAN="$2"; shift; shift;;
    -C|--buchungskreis) BUCHUNGSKREIS="$2"; shift; shift;;
    -F|--konto_finre) KONTO_FINRE="$2"; shift; shift;;
    -J|--jahr) JAHR="$2"; shift; shift;;
    -U|--mwst_monat) MWST_MONAT="$2"; shift; shift;;
    -Y|--mwst_jahr) MWST_JAHR="$2"; shift; shift;;
    -D|--sammelbeleg) SAMMELBELEG="$2"; shift; shift;;
    -R|--erlaeut) ERLAEUT="$2"; shift; shift;;
    -V|--rechnungs_nr) RECHNUNGS_NR="$2"; shift; shift;;
    *)  # Ungültige Option
      echo "Fehler: Ungültige Option: $1" >&2
      usage
      ;;
  esac
done

# Pflichtfelder prüfen
if [ -z "$BELEG" ] || [ -z "$ART" ] || [ -z "$MAN_NR" ] || [ -z "$ANW_NR" ] || [ -z "$HHST" ] || [ -z "$BUCHSCHL" ] || [ -z "$BETRAG" ] || [ -z "$BELEGART" ]; then
  echo "Fehler: Alle Pflichtfelder müssen angegeben werden:" >&2
  echo "  -b, --beleg (Belegnummer)" >&2
  echo "  -a, --art (Satzart)" >&2
  echo "  -m, --mandantennummer (Mandantennummer)" >&2
  echo "  -n, --anwendernummer (Anwendernummer)" >&2
  echo "  -h, --haushaltsstelle (Haushaltsstelle)" >&2
  echo "  -k, --buchungsschluessel (Buchungsschlüssel)" >&2
  echo "  -g, --betrag (Betrag)" >&2
  echo "  -l, --belegart (Belegart)" >&2
  exit 1
fi

# CSV-Zeile erstellen
CSV_LINE="$BELEG${FS}$ART${FS}$MAN_NR${FS}$ANW_NR${FS}$HHST${FS}$BUCHSCHL${FS}$BETRAG${FS}$FAELTERM${FS}$BLZ${FS}$KONTO_NR${FS}$VORNAME${FS}$NAME${FS}$ZAHLGRUND${FS}$ZAHLUNGSART${FS}$BELEGART${FS}$KOSTELLE${FS}$KOTRAEGER${FS}$KOART${FS}$DATUM${FS}$ANO_NR${FS}$MITTEIL${FS}$HKOSTELLE${FS}$HKOART${FS}$MENGE${FS}$PROJEKT${FS}$MWST_BETRAG${FS}$MWST_PROZ${FS}$ARCHIV_NR${FS}$PLZ${FS}$ORT${FS}$STRASSE${FS}$ADR_ID${FS}$SACHKONTO${FS}$KOSTENSTELLE${FS}$KOSTENART${FS}$BIC${FS}$IBAN${FS}$BUCHUNGSKREIS${FS}$KONTO_FINRE${FS}$JAHR${FS}$MWST_MONAT${FS}$MWST_JAHR${FS}$SAMMELBELEG${FS}$ERLAEUT${FS}$RECHNUNGS_NR"

# CSV-Zeile ausgeben und mit iconv in die Zielcodepage konvertieren
echo "$CSV_LINE" | iconv -f UTF-8 -t "$TARGET_CODEPAGE"
