from rest_framework import status, viewsets
from .serializers import NewsLetterReceipentsSerializer
from .models import NewsLetterReceipents
from rest_framework.filters import SearchFilter
from rest_framework.permissions import IsAdminUser
from rest_framework.response import Response


# Create your views here.
class NewsLetterReceipentsViewset(viewsets.ModelViewSet):
    queryset = NewsLetterReceipents.objects.order_by("email")
    serializer_class = NewsLetterReceipentsSerializer
    filter_backends = [SearchFilter]
    search_fields = ["email"]
    http_method_names = ["get", "post", "delete"]

    def get_permissions(self):
        method = self.request.method

        if method == "POST":
            return []

        return [IsAdminUser()]

    def create(self, request):
        data = request.data

        init_email = data["email"]

        existing_subscriber = NewsLetterReceipents.objects.filter(email=init_email)

        if existing_subscriber.exists():
            return Response(
                {
                    "message": f"Email '{init_email}' is already subscribed to the newsletter."
                },
                status=status.HTTP_400_BAD_REQUEST,
            )

        serializer = self.get_serializer(data=data)
        serializer.is_valid(raise_exception=True)
        serializer.save()

        return Response(
            {"message": "Successfully subscribed to newsletter."},
            status=status.HTTP_201_CREATED,
        )
