"""
Api module for the feed app.
"""
from rest_framework import status
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet
from rest_framework.decorators import action

from utils.api import AdminDeleteMixin

from .models import News
from .models import NewsLike
from .serializers import NewsSerializer


class PostViewSet(AdminDeleteMixin, ModelViewSet):
    """
    Create post endpoint.
    """

    queryset = News.objects.all()
    serializer_class = NewsSerializer

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

    @action(detail=True, methods=["post"])
    def like(self, request, pk=None):  # pylint: disable=C0103,W0613
        """
        Like or dislike a post.
        """
        post = self.get_object()

        try:
            like = NewsLike.objects.get(user=request.user, news=post)
            like.delete()
        except NewsLike.DoesNotExist:
            like = NewsLike.objects.create(
                user=request.user,
                news=post,
            )

        return Response(status=status.HTTP_200_OK)
