from posts.models import Notice
from django.utils import timezone
from django.shortcuts import render

from django.http import HttpResponse

def index(request):
    #return render(request, 'posts/index.html')

    #-------------------- eigener Versuch ---------------------

    # relevant_notices = Notice.objects.filter(pub_start__lt = timezone.datetime.now())
    # relevant_notices = Notice.objects.filter(pub_end__gt = timezone.datetime.now())

    # for curr_msg in relevant_notices:
    #     context['now'] += "TITEL DER NACHRICHT: " + curr_msg.notice_title + "TEXT DER NACHRICHT: " + curr_msg.notice_text
    #     # unschöne Lösung, da hier ein Fließtext ohne Layout-Möglichkeiten (z.B. backspace zwischen jeder neuen Zeile) entsteht
    #     # bessere Variante: for-Schleife in das Template (allMessages.html) auslagern

    #------------------ ab hier: schöne Variante --------------------

    relevant_notices = Notice.objects.all()
    relevant_notices = Notice.objects.filter(pub_start__lt=timezone.datetime.now())
    relevant_notices = Notice.objects.filter(pub_end__gt=timezone.datetime.now())
    # all diese Befehle importieren noch NHCTS aus der Datenbank! Sie bauen nur einen SQL-Zugriffs-Befehl auf (mit entsprevchender Filterung) und erst beim Auslesen wird auf Datenbank zugegriffen

    context = { "notices" : relevant_notices }

    return render(request, 'posts/allMessages.html', context)


from posts.forms import NoticeForm
from django.shortcuts import redirect

def new(request):
    #return HttpResponse("Eingabe einer neuen Nachricht!")
    if request.method == "POST":
        eingabeFenster = NoticeForm(request.POST)
        if eingabeFenster.is_valid():
            newNotice = Notice(notice_title = eingabeFenster.cleaned_data['title'],
                               notice_text = eingabeFenster.cleaned_data['text'],
                               pub_start = eingabeFenster.cleaned_data['start'],
                               pub_end = eingabeFenster.cleaned_data['end'])
            newNotice.save()
            return redirect('index')
    context = {'form' : NoticeForm() }
    return render(request, 'posts/edit.html', context)

def delete(request, id):
    msg_to_delete = Notice.objects.get(id = id)
    msg_to_delete.clean()
    return redirect('index')



from posts.models import Notice
from posts.serializers import NoticeSerializer
from django.http import JsonResponse
from rest_framework.parsers import JSONParser

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def notice_list(request):
    if request.method == 'GET':
        notices = Notice.objects.all()
        serializer = NoticeSerializer(notices, many=True)
        return JsonResponse(serializer.data, safe=False)

    elif request.method == 'POST':
        data = JSONParser().parse(request)
        serializer = NoticeSerializer(data = data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)
        else:
            return JsonResponse(serializer.errors, status=400)

    else:
        return HttpResponse(status=405)

@csrf_exempt
def notice_detail(request, id):
    try:
        notice = Notice.objects.get(id=id)
    except:
        return HttpResponse(status=404)

    if request.method == 'GET':
        serializer = NoticeSerializer(notice)
        return JsonResponse(serializer.data)

    elif request.method== 'PUT':
        data = JSONParser().parse(request)
        serializer = NoticeSerializer(notice, data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data)
        else:
            return JsonResponse(serializer.errors, status=400)

    elif request.method == 'DELETE':
        notice.delete()
        return HttpResponse(status=204)

    else:
        return HttpResponse(status=405)


