from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated
from rest_framework.authentication import TokenAuthentication

from .models import *
from .serializers import *

from rest_framework.pagination import PageNumberPagination

class CustomPagination(PageNumberPagination):
    page_size = 1000
    page_size_query_param = 'page_size'
    max_page_size = 10000

class dCanaisViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dCanais.objects.all()
    serializer_class = dCanaisSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination


class dConsultoresViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dConsultores.objects.all()
    serializer_class = dConsultoresSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

    
class dCategoriasViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dCategorias.objects.all()
    serializer_class = dCategoriasSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination
    

class dEmpreendimentosViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dEmpreendimentos.objects.all()
    serializer_class = dEmpreendimentosSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'

class dEstadosCivisViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dEstadosCivis.objects.all()
    serializer_class = dEstadosCivisSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'


class dEtapasFunilViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dEtapasFunil.objects.all()
    serializer_class = dEtapasFunilSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dFaixasIdadeViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dFaixasIdade.objects.all()
    serializer_class = dFaixasIdadeSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dFechamentoDiasViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dFechamentoDias.objects.all()
    serializer_class = dFechamentoDiasSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dInteressesViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dInteresses.objects.all()
    serializer_class = dInteressesSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dMidiasViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dMidias.objects.all()
    serializer_class = dMidiasSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dMotivosPerdaPausaViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dMotivosPerdaPausa.objects.all()
    serializer_class = dMotivosPerdaPausaSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dProfissoesViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dProfissoes.objects.all()
    serializer_class = dProfissoesSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dQuartosViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dQuartos.objects.all()
    serializer_class = dQuartosSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dRegioesViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dRegioes.objects.all()
    serializer_class = dRegioesSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dRendasViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dRendas.objects.all()
    serializer_class = dRendasSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dSexosViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dSexos.objects.all()
    serializer_class = dSexosSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dStatusViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dStatus.objects.all()
    serializer_class = dStatusSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dStatusAtividadeViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dStatusAtividade.objects.all()
    serializer_class = dStatusAtividadeSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dStatusPropostaViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dStatusProposta.objects.all()
    serializer_class = dStatusPropostaSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dSuitesViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dSuites.objects.all()
    serializer_class = dSuitesSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dTemperaturasViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dTemperaturas.objects.all()
    serializer_class = dTemperaturasSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dTiposViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dTipos.objects.all()
    serializer_class = dTiposSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dTiposAtividadeViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dTiposAtividade.objects.all()
    serializer_class = dTiposAtividadeSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dUnidadesViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dUnidades.objects.all()
    serializer_class = dUnidadesSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dUnidadesEmpreendimentoViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dUnidadesEmpreendimento.objects.all()
    serializer_class = dUnidadesEmpreendimentoSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dUTMCampaignViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dUTMCampaign.objects.all()
    serializer_class = dUTMCampaignSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dUTMContentViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dUTMContent.objects.all()
    serializer_class = dUTMContentSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dUTMMediumViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dUTMMedium.objects.all()
    serializer_class = dUTMMediumSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dUTMSourceViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dUTMSource.objects.all()
    serializer_class = dUTMSourceSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class dUTMTermViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dUTMTerm.objects.all()
    serializer_class = dUTMTermSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

# class dUTMsViewSet(viewsets.ReadOnlyModelViewSet):
#     queryset = dUTMs.objects.all()
#     serializer_class = dUTMsSerializer
#     permission_classes = [IsAuthenticated]
#     authentication_classes = [TokenAuthentication]
#     search_fields = '__all__'
#     ordering_fields = '__all__'
#     pagination_class = CustomPagination


class dVagasViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = dVagas.objects.all()
    serializer_class = dVagasSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class fAcessosViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = fAcessos.objects.all()
    serializer_class = fAcessosSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class fAcoesFunilViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = fAcoesFunil.objects.all()
    serializer_class = fAcoesFunilSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class fAtividadesViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = fAtividades.objects.all()
    serializer_class = fAtividadesSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class fOportunidadesViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = fOportunidades.objects.all()
    serializer_class = fOportunidadesSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class fPropostasViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = fPropostas.objects.all()
    serializer_class = fPropostasSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class fVendasViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = fVendas.objects.all()
    serializer_class = fVendasSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination



### Nested Viewsets

class fOportunidadesNestedViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = fOportunidades.objects.all()
    serializer_class = fOportunidadesNestedSerializer
    permission_classes = [IsAuthenticated]
    #authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class fPropostasNestedViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = fPropostas.objects.all()
    serializer_class = fPropostasNestedSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class fVendasNestedViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = fVendas.objects.all()
    serializer_class = fVendasNestedSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination
    
class fAtividadesNestedViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = fAtividades.objects.all()
    serializer_class = fAtividadesNestedSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class fAcoesFunilNestedViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = fAcoesFunil.objects.all()
    serializer_class = fAcoesFunilNestedSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination

class fAcessosNestedViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = fAcessos.objects.all()
    serializer_class = fAcessosNestedSerializer
    permission_classes = [IsAuthenticated]
    authentication_classes = [TokenAuthentication]
    search_fields = '__all__'
    ordering_fields = '__all__'
    pagination_class = CustomPagination


# class dUTMsNestedViewSet(viewsets.ReadOnlyModelViewSet):
#     queryset = dUTMs.objects.all()
#     serializer_class = dUTMsNestedSerializer
#     permission_classes = [IsAuthenticated]
#     authentication_classes = [TokenAuthentication]
#     search_fields = '__all__'
#     ordering_fields = '__all__'
#     pagination_class = CustomPagination