from django.shortcuts import render
from django.http import HttpResponse
from django.utils.safestring import mark_safe

# Create your views here.
from homepage.settings import EMAIL_HOST_USER, EMAIL_HOST_PASSWORD, EMAIL_HOST

from .forms import ContactForm
from email.mime.text import MIMEText
# this invokes the secure SMTP protocol (port 465, uses SSL)
from smtplib import SMTP_SSL as SMTP

import json
import sys




def datenschutz(request):
    return render(request, 'datenschutz.html', {})


def impressum(request):
    return render(request, 'impressum.html', {})


def index(request):

    educations: list = [
        {
            'title': mark_safe('Selbstständigkeit'),
            'subtitle': 'Dinge, die nur ohne das doppelte Sicherheitsnetz der öffentlichen Hand in den Erfahrungsschatz aufgenommen werden',
            'time': 'Apr 2019 - today()',
        },
        {
            'title': mark_safe('Führungskarriereprogramm | <span title="Bau- und Liegenschaftsbetrieb">BLB NRW</span>'),
            'time': 'Apr 2017 - Sep 2018',
        },
        {
            'title': mark_safe('MSc | <span title="Bergische Universität">BU Wuppertal</span>'),
            'subtitle': 'Real Estate Management + Construction Project Management',
            'thesis':  mark_safe('Digitalisierung als Chance für die öffentliche Hand - Die Bewirtschaftung von Immobilien auf Grundlage datenbankorientierter Gebäudemodelle am Beispiel des BLB&nbsp;NRW'),
            'time': 'Apr 2014 - Mrz 2016',
        },
        {
            'title': mark_safe('BA | <span title="Hochschule für Wirtschaft und Recht">HWR Berlin</span>'),
            'subtitle': 'BWL / Facility Management',
            'thesis': 'Strukturierte Gasbeschaffung am liberalisierten Energiemarkt für einen öffentlichen Auftraggeber mit Filialstruktur',
            'time': 'Okt 2010 - Sep 2013',
        },
    ]
    i = 1
    for education in educations:
        education['lfd'] = i
        i += 1


    experiences: list = [
        {
            'label': 'WhatsImmo',
            'time': '10-11/2022',
            'content': mark_safe('''
                WhatsImmo bietet eine hierarchische Organisation aller Informationen im Bereich des Immobilienmanagements. Von Liegenschaften über Gebäude, Stockwerke und Bereiche bis hin zu Räumen.<br>
                Beliebig viele Kontakte, Bilder und typisierte Dateien (Verträge, Schriftverkehr, Rechnungen, etc.) können erfasst werden. Durch das responsive Design sind die Daten von jedem Endgerät aus leicht zugänglich.<br>
                Aufträge werden in der angeschlossenen Auftragsverwaltung nachverfolgt. Die Auftragsverwaltung ist in Chat-Gruppen organisiert. Die Mitarbeiter:innen zur Auftragserfüllung sind Teilnehmer:innen der Chat-Gruppe und erhalten in Echtzeit über das WebSocket-Protokoll neue Nachrichten.<br>
                Als Progressive Web App (PWA) ist eine einfache Installation auf dem Smartphone (derzeit nur Android) möglich und bietet somit den Komfort einer nativen App.<br>
                <a class="underline text-petrol-500" href="/projekt/whatsimmo/">Zur Projektbeschreibung</a>
            '''),
        },
        {
            'label': 'DCA-BAU.DE',
            'time': '2021-2022 ...',
            'content': mark_safe('''
                Als SaaS Lösung bietet dieses digitale Bautagebuch die Möglichkeit, 
                die Baustellendokumentation in einem System zu erfassen und die somit
                strukturiert vorliegenden Daten direkt auszuwerten.<br>
                <a class="underline text-petrol-500" target="_blank" href="https://www.dca-bau.de">www.dca-bau.de</a><br>
                Im Rahmen der Erstentwicklung hatte ich zur Unterstützung einen Frontend-Developer angestellt.
                Die laufende Wartung liegt bei mir.
            ''')
        },
        {
            'label': 'Projektsteuerung Neubau WSW Zentrale',
            'time': '2020-today()',
            'content': mark_safe('''
                Im Rahmen eines ÖPP Verfahrens plant, realisiert und betreibt <a href="https://www.goldbeck.de/" target="_blank">Goldbeck</a> als Totalunternehmer den Neubau der Verwaltungszentrale - Wuppertaler Stadtwerke.
                Im Auftrag der <a href="https://www.psp-consult.de" target="_blank" title="PSPC Public Sector Project Consultants GmbH">PSPC GmbH</a>
                arbeite ich als integriertes Teammitglied auf der AG-Seite.<br>
                Im Rahmen der Vergabe bewertete ich die Betreiberkonzepte der Bieter.
                In der Realisierung liegt der Steuerungsschwerpunkt bei der Konkretisierung und Durchgesetzung des vertraglichen Leistungssolls und dem Inbetriebnahmemanagement.
            ''')
        },
        {
            'label': 'Abteilungsleiter Gebäudemanagement',
            'time': '2017-2019',
            'content': mark_safe('''
                Beim 
                <a href="https://www.blb.nrw.de" target="_blank">Bau- und Liegenschaftsbetrieb NRW</a> führte ich 5 Teams mit insgesamt 37 Mitarbeiter:innen.
                Als Gebäudemanagement-Abteilung der Niederlassung Dortmund betreuten wir rd. 250 Liegenschaften.
            ''')
        },

    ]

    i:int = 0
    for experience in experiences:
        experience['index'] = i
        i += 1


    skills:list = [
        {
            'label': "Zielorientiert",
        },
        {
            'label': "Analytisch",
        },
        {
            'label': "Strukturiert",
        },
        {
            'label': "Überblickend",
        },
        {
            'label': "Zuverlässig",
        },
    ]

    i = 1
    for skill in skills:
        skill['lfd'] = i
        i += 1


    context:dict = {
        'educations': educations,
        'experiences': experiences,
        'skills': skills,
    }

    return render(request, 'index.html', context)

def kontakt(request):
    text_subtype = 'html'

    if request.method == 'POST':
        dict_0 = json.loads(request.body)
        form = ContactForm(dict_0['form'])

        if form.is_valid():

            content="""
            <div style="background-color:#fff;height:fit-content;padding:10px;border-style:solid; border-width: 1px 1px 0px 1px; border-color: #aaa;">
              <div align="right" style="text-align:right">
                <img src="https://www.tobias-gerwin.de/static/homepage/img/logo_tg_white.svg" alt="Logo von Tobias Gerwin"
                  style="margin-left:auto;display:block;max-width:100%;max-height:100px">
              </div>
            </div>"""

            content = """
            <div style="padding:10px;border-style:solid; border-width: 1px 1px 1px 1px; border-color: #aaa;">
            """
            content += f"""
            <h1>Hallo,</h1>
            <p>vielen Dank für Ihre Nachricht!</p>
            <p style="font-family:courier;padding:10px;border-style:solid;border-width: 1px 1px 1px 1px; border-color: #aaa;white-space: pre-wrap;">{form.cleaned_data['message']}</p>
            """

            content += f"""
            <p>Ich werde mich bei Ihnen melden.</p>
            <p>Besten Gruß<br>Tobias Gerwin</p>
            <a href="https://www.tobias-gerwin.de">www.tobias-gerwin.de</a>
            </div>
            """

            try:
                msg = MIMEText(content, text_subtype)
                msg['Subject'] = f"Kontaktanfrage von {form.cleaned_data['name']} <{form.cleaned_data['email']}>"
                msg['From'] = 'noreply@homepage.tobias-gerwin.de' # some SMTP servers will do this automatically, not all
                msg['To'] = f"<{form.cleaned_data['email']}>"


                conn = SMTP(EMAIL_HOST)
                conn.set_debuglevel(False)
                conn.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD)
                try:
                    conn.sendmail(EMAIL_HOST_USER, [
                                  'mail@tobias-gerwin.de'], msg.as_string())
                    if form.cleaned_data['cc_myself']:
                        conn.sendmail(EMAIL_HOST_USER, [form.cleaned_data['email']], msg.as_string())
                finally:
                    conn.quit()

            except Exception as e:
                sys.exit( f"mail failed; {e}" ) # give an error message

            data = json.dumps({'notice': 'Vielen Dank für Ihre Nachricht!'})
            return HttpResponse(data, content_type="application/json")

        else:
            data = json.dumps({'errors': get_form_errors_as_dict(form)})
            return HttpResponse(data, content_type="application/json")

def get_form_errors_as_dict(form):
    rDict = {}
    for k, v in json.loads(form.errors.as_json()).items():
        if k == '__all__':
            rDict.update({'übergreifend': v})
        else:
            rDict.update({k: v})
    return rDict
