import os,sys

from django.contrib.auth.decorators import login_required
from django.http import HttpResponse, HttpResponseRedirect, FileResponse
from django.shortcuts import render
from django.template import loader

from .AWK import config, routines
#import .forms 

from .forms import EhmeldungForm, VorlagenForm, BeitragForm, VorlagenVerwaltungForm, MitgliederForm, MitgliederAuswahlForm
from eh_app.AWK.pdf_ersteller import PdfErsteller

# Create your views here.

try:
    home = os.environ["HOME"]
    if os.path.exists(f"{home}/.eclipse/org.eclipse.platform_4.18.0_1473617060_linux_gtk_x86_64/plugins/org.python.pydev.core_8.3.0.202104101217/pysrc/"):
        # its a eclipse development environment
        sys.path.append(f"{home}/.eclipse/org.eclipse.platform_4.18.0_1473617060_linux_gtk_x86_64/plugins/org.python.pydev.core_8.3.0.202104101217/pysrc/")
        import pydevd
        pydevd.settrace()

except:
    pass

def index(request, verein):
    template = loader.get_template("vbasis.html")
    raise RuntimeError("blub")
    return HttpResponse(template.render({"verein" : verein}, request))

def vorlagen_verwalten(request, verein):
    # TODO vorlagen_liste durch Dateioperationen aufbauen. S. kassenbrief_alt
    # Die finale Liste muss dann folgende Form haben:
    vorlagen_liste = [("vorlage1.tex","vorlage1"),("vorlage2.tex","vorlage2")]

    if request.method == 'POST':
        # Form auswerten
        # Verarbeitung in routines.py aufrufen

        # Wenn alles gut gegangen, zurück zum Kassenbrief
        return HttpResponseRedirect(f'/{verein}/kassenbrief')
    else:
        vorlagen_form = VorlagenVerwaltungForm(vorlagen=vorlagen_liste)
        
    template = loader.get_template("vorlagen_verwalten.html")
    return HttpResponse(template.render(
        {
            "verein" : verein, 
            "vorlagen_form" : vorlagen_form }, 
        request))
    '''
    ---------------------------------------------------------------
    Neue Templates installieren
    
    <Dateiauswahlknopf>
    <Knopf"Installieren">
    '''

def mitglieder_auswahlen(request, verein):
    # TODO vorlagen_liste durch Dateioperationen aufbauen. S. kassenbrief_alt
    # Die finale Liste muss dann folgende Form haben:
    mitglieder_liste = [("12","Wagler"),("13","Maier")]

    if request.method == 'POST':
        # Form auswerten
        # Auswahl in Cookie schreiben, s. util.py

        # Wenn alles gut gegangen, zurück zum Kassenbrief
        return HttpResponseRedirect(f'/{verein}/kassenbrief')
    else:
        mausw_form = MitgliederAuswahlForm(mitglieder=mitglieder_liste)
        
    template = loader.get_template("mitglieder_auswahlen.html")
    return HttpResponse(template.render(
        {
            "verein" : verein, 
            "mausw_form" : mausw_form }, 
        request))
    '''
    ---------------------------------------------------------------
    Neue Templates installieren
    
    <Dateiauswahlknopf>
    <Knopf"Installieren">
    '''

#@login_required
def kassenbrief(request, verein):
    '''
    GET:
    Diese Methode liest aus der Config die Einstellungen und zeigt sie an.
    
    POST: 
<<<<<<< HEAD
    Diese Methode 
    - überprüft, ob an den Einstellungen was verändert wurde und falls ja, ändert die Config 
    - bearbeitet den finalen "Erstellen"
    
    '''
    fehlertext_vorlage = ""
    fehlertext_beitrag = ""
    vconf = config.getInstance(verein)
    beitrag_basis  = vconf.getConfig("beitrag_basis", 0)
    beitrag_zusatz = vconf.getConfig("beitrag_zusatz", 0)
    vorlage_selected = vconf.getConfig("vorlage", "")
    vorlagen_liste = []
    if os.path.isdir("eh_app/templates/"+verein):
        dirlist = os.listdir("eh_app/templates/"+verein) # returns list
        for t in dirlist:
            vorlagen_liste.append((t,t))
    if request.method == 'POST':
        vorlagen_form = VorlagenForm(request.POST, request.FILES, vorlagen=vorlagen_liste)
        beitrag_form = BeitragForm(request.POST, request.FILES)
        if vorlagen_form.is_valid() and beitrag_form.is_valid():
            routines.aktualisiere_config(vconf, vorlagen_form.cleaned_data, beitrag_form.cleaned_data)
            return HttpResponseRedirect('erfolg')
            '''
=======
    Diese Methode bearbeitet den finalen "Erstellen"
    
    Die Unterformulare (z.B. Beitrag ändern) landen in einer eigenen Methode, die die 
    Einstellungen in der Config ändert und dann diese hier mit GET aufruft.
    '''
    '''
    ---------------------------------------------------------------
    Templateauswahl
    
    Ausgewähltes Template: <Wert aus Config>
    Klappliste <Knopf"Template ändern">
    Link -> Neue Templates installieren
    ---------------------------------------------------------------
    '''
    fehlertext_vorlage = ""
    vconf = config.getInstance(verein)
    beitrag_basis  = vconf.getConfig("beitrag_basis", 0)
    beitrag_zusatz = vconf.getConfig("beitrag_zusatz", 0)
    vorlagen_liste = ['T1']
    vorlagen_form = VorlagenForm(templates=vorlagen_liste)
    beitrag_form = BeitragForm
    mausw_form = MitgliederForm(zul="12,45,334")
    if request.method == 'POST':
        vorlagen_form = VorlagenForm(request.POST, request.FILES)
        beitrag_form = BeitragForm(request.POST, request.FILES)
        mausw_form = MitgliederForm(request.POST, request.FILES)
        if vorlagen_form.is_valid() and beitrag_form.is_valid():
            routines.aktualisiere_config(vconf, vorlagen_form.cleaned_data, beitrag_form.cleaned_data)
            if not vorlagen_liste:
                fehlertext_vorlage = "Bitte Kassenbriefvorlage auswählen"
            else:   
                routines.pdfs_erstellen(request, verein)
                return HttpResponseRedirect('erfolg')
            '''
    else:
        beitrag_basis  = vconf.getConfig("beitrag_basis", 0)
        beitrag_zusatz = vconf.getConfig("beitrag_zusatz", 0)
        # GET request
        if vorlage_selected == "":
            fehlertext_vorlage = "Bitte Vorlage auswählen"
        if not vorlagen_liste:
            fehlertext_vorlage = "Bitte Vorlagen in Vorlagenverzeichnis einfügen"
        if beitrag_basis == 0 or beitrag_zusatz == 0:
            fehlertext_beitrag = "Bitte Eingaben zu Basis- und Zusatzbeitrag vornehmen"
        vorlagen_form = VorlagenForm(vorlagen=vorlagen_liste, initial={'vorlage':vorlage_selected})
        beitrag_form = BeitragForm(initial={'basisbeitrag': beitrag_basis, 'zusatzbeitrag': beitrag_zusatz})
        mitglieder_form = MitgliederForm()
        
    return render(request, 
                  'kassenbrief.html', 
                  {'vorlagen_form': vorlagen_form, 
                   'beitrag_form': beitrag_form,
                   'mitglieder_form': mitglieder_form,
                   'verein': verein, 
                   'fehlertext_vorlage' : fehlertext_vorlage, 
                   'fehlertext_beitrag' : fehlertext_beitrag})
=======
    return render(request, 'kassenbrief.html', {'vorlagen_form': vorlagen_form, 'beitrag_form': beitrag_form, 'mausw_form': mausw_form, 'verein': verein, 'fehlertext' : fehlertext_vorlage})
>>>>>>> origin/michael
   
def kassenbrief_alt(request, verein):
    fehlertext = ""
    # Hole Daten aus der Config
    vconf = config.getInstance(verein)
    beitrag_basis  = vconf.getConfig("beitrag_basis", 0)
    beitrag_zusatz = vconf.getConfig("beitrag_zusatz", 0)

    # suche Templates
    import os
    dirlist = None
    if os.path.isdir("eh_app/templates/"+verein):
        dirlist = os.listdir("eh_app/templates/"+verein) # returns list
    if dirlist:
        template_list = []
        for t in dirlist:
            template_list.append((t,t))
    
            # if this is a POST request we need to process the form data
        if request.method == 'POST':
        # create a form instance and populate it with data from the request:
            form = KassenbriefForm(request.POST, request.FILES, dirlist)
            # check whether it's valid:
            if form.is_valid():
                # bei Änderungen Konfiguration aktualisieren
                routines.aktualisiere_config(vconf, form.cleaned_data, request.FILES.get('briefpapier_neu', None))
            
                #Stammdaten neu aus Datenbank lesen und prüfen
                briefpapier    = vconf.getConfig("briefpapier")
                beitrag_basis  = int(vconf.getConfig("beitrag_basis", 0))
                beitrag_zusatz = int(vconf.getConfig("beitrag_zusatz", 0))
                briefpapier_label = briefpapier
                if not briefpapier:
                    briefpapier_label = "Kein Briefpapier ausgewäht"
            
                    # prüfen ob Werte gefüllt
                if briefpapier is None:
                    fehlertext = "Bitte Briefpapier auswählen."
                elif beitrag_basis == 0 and beitrag_zusatz == 0:
                    fehlertext = "Bitte Basisbeitrag und Zusatzbeitrag ausfüllen."
                elif beitrag_basis == 0:
                    fehlertext = "Bitte Basisbeitrag ausfüllen."
                elif beitrag_zusatz == 0:
                    fehlertext = "Bitte Zusatzbeitrag ausfüllen."
            
                # wenn Werte gefüllt 
                else:
                    routines.pdfs_erstellen(request, verein)
                
                    # redirect to a new URL:
                    return HttpResponseRedirect('erfolg')


        # if a GET (or any other method) we'll create a blank form
        else:
            form = KassenbriefForm(templates=template_list, initial={'basisbeitrag': beitrag_basis, 'zusatzbeitrag': beitrag_zusatz})
            #form = KassenbriefForm(initial={'basisbeitrag': beitrag_basis, 'zusatzbeitrag': beitrag_zusatz})
            return render(request, 'kassenbrief.html', {'form': form, 'verein': verein, 'fehlertext' : fehlertext})
    else:
        fehlertext = "Bitte Templates anlegen."
        return render(request, 'fehler.html', {'verein': verein, 'fehlertext' : fehlertext})

    
    '''
    template = loader.get_template("kassenbrief.html")
    return HttpResponse(template.render({
        "verein"         : verein,
        "briefpapier"    : briefpapier,
        "beitrag_basis"  : beitrag_basis,
        "beitrag_zusatz" : beitrag_zusatz
        }, request))

    '''

def kassenbrief_erfolg(request, verein):
    # Hole Formulardaten
    print (request.POST)
    print (request.FILES)
    return HttpResponse("xxx")

def kassenbrief_download(request, verein):
    response = FileResponse(open(r'G:\SVBaL\python\eh_util\eh_app\test.pdf', 'rb'))
    return response

def ehmeldung(request, verein):
    # if this is a POST request we need to process the form data
    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = EhmeldungForm(request.POST, request.FILES)
        # check whether it's valid:
        if form.is_valid():
            # bei Änderungen Konfiguration aktualisieren
            routines.erstelle_ehmeldung(form.cleaned_data)
            # redirect to a new URL:
            return HttpResponseRedirect('/thanks/')

    # if a GET (or any other method) we'll create a blank form
    else:
        form = EhmeldungForm()

    return render(request, 'ehmeldung.html', {'form': form, 'verein': verein})
    
    