from django.views.decorators.http import require_GET, require_POST

from jet.forms import (
    AddBookmarkForm,
    ModelLookupForm,
    RemoveBookmarkForm,
    ToggleApplicationPinForm,
)
from jet.models import Bookmark
from jet.utils import JsonResponse


@require_POST
def add_bookmark_view(request):
    result = {"error": False}
    form = AddBookmarkForm(request, request.POST)

    if form.is_valid():
        bookmark = form.save()
        result.update({"id": bookmark.pk, "title": bookmark.title, "url": bookmark.url})
    else:
        result["error"] = True

    return JsonResponse(result)


@require_POST
def remove_bookmark_view(request):
    result = {"error": False}

    try:
        instance = Bookmark.objects.get(pk=request.POST.get("id"))
        form = RemoveBookmarkForm(request, request.POST, instance=instance)

        if form.is_valid():
            form.save()
        else:
            result["error"] = True
    except Bookmark.DoesNotExist:
        result["error"] = True

    return JsonResponse(result)


@require_POST
def toggle_application_pin_view(request):
    result = {"error": False}
    form = ToggleApplicationPinForm(request, request.POST)

    if form.is_valid():
        pinned = form.save()
        result["pinned"] = pinned
    else:
        result["error"] = True

    return JsonResponse(result)


@require_GET
def model_lookup_view(request):
    result = {"error": False}

    form = ModelLookupForm(request, request.GET)

    if form.is_valid():
        items, total = form.lookup()
        result["items"] = items
        result["total"] = total
    else:
        result["error"] = True

    return JsonResponse(result)
