from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated
from .models import UserProfile
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 .serializers import UserProfileSerializer
from apps.permissions.permissions import CompanyPermission


# Create your views here.
class UserProfileViewSet(viewsets.ModelViewSet):
    pagination_class = LimitOffsetPagination
    filter_backends = [
        backend_filters.DjangoFilterBackend,
        filters.SearchFilter,
    ]
    filterset_class = UserProfileFilter
    search_fields = ['first_name', 'last_name', 'user__username']
    queryset = UserProfile.objects.all()
    serializer_class = UserProfileSerializer
    lookup_field = 'user__username'
    lookup_url_kwarg = 'username'
    permission_classes = [IsAuthenticated]

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

    def get_queryset(self):
        if self.action == 'list' or self.action == 'retrieve':
            # For listing, show profiles of users in the same active company
            if self.request.user.is_superuser:
                return self.queryset.filter(user__is_active=True)
            elif self.request.user.active_company:
                return self.queryset.filter(
                    user__is_active=True,
                    user__companies=self.request.user.active_company
                )
            else:
                return self.queryset.none()
        
        # For other actions, only show user's own profile
        return self.queryset.filter(user__is_active=True, user=self.request.user)
