import os

class PdfErsteller(object):
    '''
    Klasse zur Erstellung von PDFs
    Diese Klasse verwaltet Resourcen. Mit "with" verwenden!
    '''

    def __init__(self, request, template, basisbtr: int, zusatzbtr: int, pfad, pdfersteller):
        self.request        = request
        self.template       = template
        self.pfad           = pfad
        self.pdfersteller   = pdfersteller
        self.basisbtr       = basisbtr
        self.zusatzbtr      = zusatzbtr
        self.gesamtbetrag   = 0
        self.anzahl         = 0
        self.csvfile        = open(os.path.join(pfad, "ergebnis", "rechnungen.csv"), "w")
        print("Name", "Vorname", "Straße", "PLZ", "Ort", "Anz. Grundstück", "Betrag", sep=";", file=self.csvfile )
        
    def __enter__(self):
        return self
    
    def __exit__(self, exc_type, exc_value, traceback):
        print ("Gesamt", self.gesamtbetrag, sep=";", file=self.csvfile )
        self.csvfile.close()
        
    def erstellepdf(self, m):
        gg      = m.VersicherteGrundstucke()
        g1      = gg[0]
        gn      = gg[1:]
        beitrag = self.basisbtr + self.zusatzbtr*len(gn)
        konto   = None
        if len(m.iban) > 0:
            konto = m.iban[0:4]+" xxxx xxxx xxxx "+m.iban[-2:]
        
        # Hinweise zur Templateerstellung:
        # https://docs.djangoproject.com/en/2.2/ref/templates/builtins/#ref-templates-builtins-tags
        
        tex_bearbeitet = self.template.render(
            {"vorname"      : m.vorname, 
             "nachname"     : m.nachname,
             "strasse"      : m.strasse,
             "plz"          : m.plz,
             "ort"          : m.ort,
             "anrede"       : m.anrede,
             "grundstuck1"  : g1,
             "basisbeitrag" : self.basisbtr,
             "g_weitere"    : gn,
             "zusatzbeitrag": self.zusatzbtr,
             "beitrag"      : beitrag,
             "konto"        : konto,
             "m_nr"         : m.mitgliedsnr
            }, self.request)
    
        with open(f'{self.pfad}/{m.nachname}_{m.mitgliedsnr}_brief.tex', 'w') as f:
            f.write(tex_bearbeitet) # schreibt in dieses neue Dokument
            
        # AUfruf PDF latex tex -> pdf
        import subprocess
        rc = subprocess.call(["bash", self.pdfersteller, self.pfad, f'{m.nachname}_{m.mitgliedsnr}_brief.tex'])
        if rc != 0:
            raise RuntimeError(f"pdfersteller.sh failed: {rc}")
        
        # schreibe Eintrag in Ergebnisdatei und erhöhe Gesamzbetrag
        print(m.nachname, m.vorname, m.strasse, m.plz, m.ort, len(gg), beitrag, sep=";", file=self.csvfile )
        self.gesamtbetrag += beitrag
        self.anzahl       += 1
