from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated
from rest_framework import filters
from utils.paginations.pagination import LimitOffsetPagination
from django_filters import rest_framework as backend_filters
from .filters import UserProfileFilter
from .repositories import UserProfileRepository
from .serializers import UserProfileSerializer


class UserProfileViewSet(viewsets.ModelViewSet):
    serializer_class = UserProfileSerializer
    pagination_class = LimitOffsetPagination
    filter_backends = [
        backend_filters.DjangoFilterBackend,
        filters.SearchFilter,
    ]
    filterset_class = UserProfileFilter
    search_fields = ['first_name', 'last_name', 'user__username']
    permission_classes = [IsAuthenticated]
    lookup_field = 'user__username'
    lookup_url_kwarg = 'username'

    repository = UserProfileRepository()

    def get_queryset(self):
        return self.repository.get_for_action(
            user=self.request.user,
            action=self.action,
        )

    def perform_create(self, serializer):
        """Automatically set the user to the currently authenticated user"""
        serializer.save(user=self.request.user)
