from django.shortcuts import render
from django import forms
from captcha.fields import CaptchaField
from .models import Betrieb, Partei, PresidentCandidate, Question
from .mailutils import send_from_arbeitsministerium


class BetriebForm(forms.Form):
    name = forms.CharField(label='Name des Betriebs', max_length=100)
    manager = forms.CharField(label='Betriebsleiter', max_length=200)
    email = forms.EmailField(label='Kontakt Email')
    business_idea = forms.CharField(label='Idee', widget=forms.Textarea)
    captcha = CaptchaField()


class ParteiForm(forms.Form):
    name = forms.CharField(label='Name der Partei', max_length=100)
    abbreviation = forms.CharField(label='Abkürzung', max_length=5)
    chef = forms.CharField(label='Parteivorsitzende', max_length=200)
    email = forms.EmailField(label='Kontakt Email')
    description = forms.CharField(label='Beschreibung', widget=forms.Textarea)
    captcha = CaptchaField()


class PresidentForm(forms.Form):
    name = forms.CharField(label='Name', max_length=100)
    email = forms.EmailField(label='Kontakt Email')
    motivation = forms.CharField(label='Motivation', widget=forms.Textarea)
    captcha = CaptchaField()


class QuestionForm(forms.Form):
    subject = forms.CharField(label='Thema', max_length=100)
    email = forms.EmailField(label='Kontakt Email')
    content = forms.CharField(label='Frage', widget=forms.Textarea)
    captcha = CaptchaField()


# Create your views here.
def index(request):
    return render(request, "meingoethopia/index.html")


def betrieb_new(request):
    if request.method == 'POST':
        form = BetriebForm(request.POST)
        if form.is_valid():
            betrieb = Betrieb(name=form.cleaned_data.get('name'),
                              manager=form.cleaned_data.get('manager'),
                              email=form.cleaned_data.get('email'),
                              business_idea=form.cleaned_data.get('business_idea'),
                              ip_address=get_client_ip(request),
                              confirmed=False)
            betrieb.save()
            send_from_arbeitsministerium(
                'Anmeldung des Betriebs: {}'.format(betrieb.name),
                MAIL_CONTENT_BETRIEB.format(name=betrieb.manager), [betrieb.email]
            )
            return render_confirmation(request)
    else:
        form = BetriebForm()
    return render(request, "meingoethopia/betrieb_new.html", {'form': form})


def partei_new(request):
    if request.method == 'POST':
        form = ParteiForm(request.POST)
        if form.is_valid():
            partei = Partei(name=form.cleaned_data.get('name'),
                            abbreviation=form.cleaned_data.get('abbreviation'),
                            chef=form.cleaned_data.get('chef'),
                            email=form.cleaned_data.get('email'),
                            description=form.cleaned_data.get('description'),
                            ip_address=get_client_ip(request),
                            confirmed=False)
            partei.save()
            return render_confirmation(request)
    else:
        form = ParteiForm()
    return render(request, "meingoethopia/partei_new.html", {'form': form})


def praesident_werden(request):
    if request.method == 'POST':
        form = PresidentForm(request.POST)
        if form.is_valid():
            president = PresidentCandidate(name=form.cleaned_data.get('name'),
                                           email=form.cleaned_data.get('email'),
                                           motivation=form.cleaned_data.get('motivation'),
                                           ip_address=get_client_ip(request),
                                           confirmed=False)
            president.save()
            return render_confirmation(request)
    else:
        form = PresidentForm()
    return render(request, "meingoethopia/president.html", {'form': form})


def question_new(request):
    if request.method == 'POST':
        form = QuestionForm(request.POST)
        if form.is_valid():
            question = Question(subject=form.cleaned_data.get('subject'),
                                email=form.cleaned_data.get('email'),
                                content=form.cleaned_data.get('content'),
                                ip_address=get_client_ip(request),
                                answered=False)
            question.save()
            return render_confirmation(request)
    else:
        form = QuestionForm()
    return render(request, "meingoethopia/question_new.html", {'form': form})


def render_confirmation(request):
    return render(request, "meingoethopia/confirmed.html")


def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip


MAIL_CONTENT_BETRIEB = "Lieber {name},\nvielen Dank für die Anmeldung Deines" \
    " Betriebes. Die Informationsveranstaltungen beginnen erst im Februar, deshalb\n" \
    "wird sich das Arbeitsministerium dann erst mit Dir in Verbindung setzen.\n\n" \
    "Bei weiteren Fragen kannst du gerne info@goethopia.de anschreiben, oder \n" \
    "uns direkt über arbeitsministerium@goethopia.de erreichen, wenn es um einen \n" \
    "Betrieb geht. Darüber hinaus möchten wir dich darauf hinweisen, dass du Parteien, \n" \
    "die mit deinen Interessen als Betriebsleiter übereinstimmen, natürlich tatkräftig \n" \
    "unterstützen kannst in Form von Mitgliedschaft oder Unterstützung per Unterschrift.\n\n" \
    "Viele Grüße,\n" \
    "Organisation Goethopia"
