from django.contrib.auth.base_user import AbstractBaseUser
from rest_framework import viewsets, permissions
from django.contrib.auth import get_user_model

from apps.companies.constants import CompanyType
from apps.companies.serializers import (
    DealershipStaffSerializer,
)
from apps.core.mixins import FullNameSearchMixin
from utils.paginations import LimitOffsetPagination


def get_dealership_staff_queryset(requesting_user: AbstractBaseUser):
    user = get_user_model()

    if not requesting_user.companies.filter(
            company_type=CompanyType.DEALERSHIP_GROUP
    ).exists():
        return user.objects.none()

    return user.objects.filter(
        companies__company_type=CompanyType.DEALERSHIP
    ).distinct()

class DealershipStaffViewSet(
    viewsets.ModelViewSet,
    FullNameSearchMixin,
):
    permission_classes = [permissions.IsAuthenticated]
    pagination_class = LimitOffsetPagination
    ordering_fields = ['full_name', 'created_at', 'is_active']
    ordering = ['full_name']

    def get_queryset(self):
        qs = get_dealership_staff_queryset(self.request.user)

        qs = self.annotate_full_name(qs)

        qs = self.apply_full_name_search(qs)

        return qs

    def get_serializer_class(self):
        return DealershipStaffSerializer
