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
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")
    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">
    '''

#@login_required
def kassenbrief(request, verein):
    '''
    GET:
    Diese Methode liest aus der Config die Einstellungen und zeigt sie an.
    
    POST: 
    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')
            '''
            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})
   
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})
    
    