from django.contrib.auth.models import User
from rest_framework import generics, permissions, viewsets
from rest_framework.response import Response

from .models import Profile, UserNotificationPreference
from .serializers import ProfileSerializer, RegisterSerializer, UserNotificationPreferenceSerializer


class RegisterView(generics.CreateAPIView):
    queryset = User.objects.all()
    permission_classes = (permissions.AllowAny,)
    serializer_class = RegisterSerializer


class ProfileViewSet(viewsets.ModelViewSet):
    serializer_class = ProfileSerializer

    def get_queryset(self):
        return Profile.objects.filter(user=self.request.user)

    def list(self, request, *args, **kwargs):
        profile, _ = Profile.objects.get_or_create(user=request.user, defaults={"display_name": request.user.username})
        return Response(self.get_serializer(profile).data)


class UserNotificationPreferenceViewSet(viewsets.ModelViewSet):
    serializer_class = UserNotificationPreferenceSerializer

    def get_queryset(self):
        return UserNotificationPreference.objects.filter(user=self.request.user)

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

    def list(self, request, *args, **kwargs):
        preference, _ = UserNotificationPreference.objects.get_or_create(user=request.user)
        return Response(self.get_serializer(preference).data)
