from rest_framework import viewsets, filters
from django_filters.rest_framework import DjangoFilterBackend
from .models import Stroj, Vozilo
from .serializers import (
    VoziloSerializer, 
    VoziloListaSerializer, 
    VoziloDetaljiSerializer,
    StrojSerializer
)

class StrojViewSet(viewsets.ModelViewSet):
    """
    ViewSet za pregled, kreiranje i uređivanje strojeva i dizalica.
    """
    # select_related radi SQL JOIN i povlači podatke o kupcu odmah
    queryset = Stroj.objects.all().select_related('vlasnik').prefetch_related('radni_nalozi')
    serializer_class = StrojSerializer
    
    # Dodajemo mogućnosti filtriranja, pretrage i sortiranja
    filter_backends = [
        DjangoFilterBackend, 
        filters.SearchFilter, 
        filters.OrderingFilter
    ]
    
    # Omogućuje filtriranje strojeva po vlasniku ili tipu
    # npr. /api/strojevi/?vlasnik=1 ili /api/strojevi/?tip=dizalica_auto
    filterset_fields = ['vlasnik', 'tip']
    
    # Omogućuje pretragu po nazivu, marki ili serijskom broju
    search_fields = ['naziv', 'marka', 'serijski_broj', 'registracija']
    
    # Omogućuje sortiranje po radnim satima ili godini proizvodnje
    ordering_fields = ['radni_sati', 'godina_proizvodnje', 'datum_zadnjeg_atesta']
    ordering = ['-datum_zadnjeg_atesta']  # Defaultno prikazuje one koji su zadnji atestirani

class VoziloViewSet(viewsets.ModelViewSet):
    """
    ViewSet za pregled, kreiranje i uređivanje voznog parka.
    Usklađen sa StrojViewSet arhitekturom.
    """
    queryset = Vozilo.objects.all()
    
    # Postavljanje filter backenda (isto kao u StrojViewSet)
    filter_backends = [
        DjangoFilterBackend, 
        filters.SearchFilter, 
        filters.OrderingFilter
    ]
    
    # Omogućuje filtriranje vozila po statusu
    # npr. /api/fleet/vozila/?status=u_radu
    filterset_fields = ['status']
    
    # Omogućuje pretragu po nazivu i registraciji
    search_fields = ['naziv', 'registracija']
    
    # Omogućuje sortiranje po kilometrima ili statusu
    ordering_fields = ['trenutni_kilometri', 'status']
    ordering = ['naziv']  # Defaultno sortiranje po abecedi naziva

    def get_serializer_class(self):
        """
        Dinamički odabir serializera za optimalne performanse.
        """
        if self.action == 'list':
            return VoziloListaSerializer
        if self.action == 'retrieve':
            return VoziloDetaljiSerializer
        
        # Default za POST/PUT/PATCH
        return VoziloSerializer