from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import authentication, permissions, status
from rest_framework.authentication import SessionAuthentication
from rest_framework.renderers import JSONRenderer
from django.core import serializers
from .models import BlockModel

class BlockView(APIView):
	permission_classes = (permissions.IsAuthenticated,)
	authentication_classes = (SessionAuthentication,)

	def get(self, request, pk):
		block = BlockModel.objects.filter(pk=pk)
		if (block.exists()):
			return Response(serializers.serialize("json", block), status=status.HTTP_200_OK)
		else:
			return Response("Not Found", status=status.HTTP_404_NOT_FOUND)


class BlocksView(APIView):
	permission_classes = (permissions.IsAuthenticated,)
	authentication_classes = (SessionAuthentication,)

	def get(self, request):
		blocks = BlockModel.objects.filter(blocker=request.user.pk)
		if (blocks):
			return Response(serializers.serialize("json", BlockModel.objects.filter(blocker=request.user.pk)), status=status.HTTP_200_OK)
		return Response({}, status=status.HTTP_204_NO_CONTENT)

	def post(self, request):
		data: dict = request.data
		users_id = request.data.get("users_id", None)

		if (users_id == None):
			return Response({"Error"}, status=status.HTTP_400_BAD_REQUEST)

		if (BlockModel.objects.filter(blocker=users_id[0], blocked=users_id[1])):
			return Response({"Already Exist"}, status=status.HTTP_409_CONFLICT)

		new_block = BlockModel()
		new_block.blocker = users_id[0]
		new_block.blocked = users_id[1]
		new_block.save()

		return Response({"block_id": new_block.pk}, status=status.HTTP_201_CREATED)

	def delete(self, request):
		data: dict = request.data
		users_id = request.data.get("users_id", None)

		if (users_id == None):
			return Response({"Error"}, status=status.HTTP_400_BAD_REQUEST)

		block = BlockModel.objects.filter(blocker=users_id[0], blocked=users_id[1])

		print(list(block))
		if (block.count() > 1):
			return Response("Not normal >:[", status=status.HTTP_500_INTERNAL_SERVER_ERROR)
		
		if (not block):
			return Response("Don't exist", status=status.HTTP_404_NOT_FOUND)

		block.delete()
		return Response("Deleted", status=status.HTTP_200_OK)
