""" views for actions you can take in the application """
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseNotFound
from django.shortcuts import get_object_or_404, redirect
from django.template.response import TemplateResponse
from django.utils.decorators import method_decorator
from django.views import View
from django.views.decorators.http import require_POST

from bookwyrm import models

# pylint: disable= no-self-use
@method_decorator(login_required, name="dispatch")
class Block(View):
    """blocking users"""

    def get(self, request):
        """list of blocked users?"""
        return TemplateResponse(request, "preferences/blocks.html")

    def post(self, request, user_id):
        """block a user"""
        to_block = get_object_or_404(models.User, id=user_id)
        models.UserBlocks.objects.create(
            user_subject=request.user, user_object=to_block
        )
        return redirect("/preferences/block")


@require_POST
@login_required
def unblock(request, user_id):
    """undo a block"""
    to_unblock = get_object_or_404(models.User, id=user_id)
    try:
        block = models.UserBlocks.objects.get(
            user_subject=request.user,
            user_object=to_unblock,
        )
    except models.UserBlocks.DoesNotExist:
        return HttpResponseNotFound()
    block.delete()
    return redirect("/preferences/block")