# *coding: utf-8*

from api.serializers import *
from rest_framework import permissions
from oauth2_provider.ext.rest_framework import TokenHasReadWriteScope
from rest_framework import generics
from drf_multiple_model.views import MultipleModelAPIView
from datetime import datetime, timedelta



import django_filters

class EventFilter(django_filters.rest_framework.FilterSet):
    class Meta:
        model = Event
        fields = ['refPlace','valid','refEventCategory','refTown']


class EventListView(generics.ListCreateAPIView):
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = Event.objects.filter(valid=True).select_related('refPlace').select_related('refEventCategory').cache()
    serializer_class = EventSerializer
    filter_class = EventFilter
    #distance_filter_field = 'location'
    ordering = ('dateEvent',)
    #distance_filter_convert_meters = True
    #bbox_filter_include_overlapping = False  # Optional
    pagination_class = NoPaginationResults

class EventDetailView(generics.RetrieveUpdateDestroyAPIView):
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = Event.objects.all().select_related('refPlace').cache()
    serializer_class = EventSerializer


#### Custom Methods #########

class EventUsersView(generics.CreateAPIView):
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = EventUsers.objects.all().select_related('refEvent')
    serializer_class = EventUsersForCreateSerializer

class EventsUserDetailView(generics.RetrieveUpdateDestroyAPIView):
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = EventUsers.objects.all().select_related('refEvent')
    serializer_class = EventUsersForCreateSerializer


class EventCommentsView(generics.CreateAPIView):
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = EventComments.objects.filter(valid=True).select_related('refEvent')
    serializer_class = EventCommentsForCreateSerializer

class EventCategoryView(generics.ListAPIView):
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = EventCategory.objects.all().order_by('name')
    serializer_class = EventCategorySerializer

class EventFullDetailView(MultipleModelAPIView):
    ##permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]

    def get_queryList(self):
        refEvent = self.request.query_params.get('refEvent', None)
        comments = EventComments.objects.filter(valid=True, refEvent=refEvent).order_by('createdAt').select_related("refEvent").select_related("refUser")
        usersGoing = EventUsers.objects.filter(refEvent=refEvent).order_by('-createdAt').select_related("refEvent").select_related("refUser")
        queryList = [
            (comments, EventCommentsSerializer),
            (usersGoing, EventUsersSerializer),
        ]
        return queryList
