from rest_framework.generics import ListAPIView
from rest_framework.response import Response
from apps.permissions.permissions import CompanyPermission
from apps.companies.services import CompanyUserService, CompanyRoleService
from apps.companies.serializers import CompanyUserSimpleSerializer
from utils.paginations import Max1000LimitOffsetPagination


class CompanyUsersListView(ListAPIView):
    serializer_class = CompanyUserSimpleSerializer
    pagination_class = Max1000LimitOffsetPagination

    def get_permissions(self):
        return [CompanyPermission('view_users')]

    def list(self, request, *args, **kwargs):
        role_param = request.query_params.get('role')

        if role_param == 'name':
            data = CompanyRoleService.list_roles_for_company(request.user)
            return Response(data)

        queryset = CompanyUserService.list_company_users(
            user=request.user,
            role_param=role_param
        )
        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)
