from rest_framework import viewsets, generics, filters
from django_filters.rest_framework import DjangoFilterBackend
from django.utils import timezone
from django.db.models import Q
from .models import Dogadaj
from .serializers import DogadajSerializer

class DogadajViewSet(viewsets.ModelViewSet):
    """
    Glavni API za kalendar. Podržava pregled svih termina, 
    drag-and-drop (patch) i kreiranje novih bilješki.
    """
    # VAŽNO: select_related('radni_nalog__izvrsitelj') je ključan 
    # jer tvoj model koristi @property izvrsitelj. 
    # Bez ovoga, svaki termin u kalendaru bi radio poseban upit u bazu.
    queryset = Dogadaj.objects.all().select_related(
        'radni_nalog__izvrsitelj', 
        'radni_nalog__klijent',
        'klijent', 
        'vozilo', 
        'serviser_u_kalendaru'
    )
    serializer_class = DogadajSerializer
    
    filter_backends = [DjangoFilterBackend, filters.OrderingFilter]
    filterset_fields = ['tip', 'klijent', 'vozilo']
    ordering = ['pocetak']

    def get_queryset(self):
        """
        Opcionalno: Ako želiš da serviseri vide samo svoje termine u kalendaru,
        otkomentiraj donji dio. Ako dispečer vidi sve, ostavi kako jest.
        """
        qs = super().get_queryset()
        # if not self.request.user.is_staff:
        #    return qs.filter(Q(radni_nalog__izvrsitelj=self.request.user) | Q(serviser_u_kalendaru=self.request.user))
        return qs

class MojRasporedView(generics.ListAPIView):
    """
    Endpoint namijenjen mobilnoj aplikaciji: "Moji zadaci za danas".
    Pristup: GET /kalendar/api/moj-raspored/
    """
    serializer_class = DogadajSerializer

    def get_queryset(self):
        user = self.request.user
        danas = timezone.now().date()
        
        # Filtriramo samo ono što je dodijeljeno ulogiranom korisniku za danas
        return Dogadaj.objects.filter(
            Q(pocetak__date=danas) | Q(kraj__date=danas)
        ).filter(
            Q(radni_nalog__izvrsitelj=user) | Q(serviser_u_kalendaru=user)
        ).select_related('radni_nalog', 'klijent', 'vozilo')