from rest_framework import serializers
from .models import Stroj, Vozilo


class StrojShortSerializer(serializers.ModelSerializer):
    """
    Kraća verzija serijalizatora za brze liste ili dropdown izbornike.
    """
    class Meta:
        model = Stroj
        fields = ['id', 'naziv', 'serijski_broj', 'registracija']

class StrojSerializer(serializers.ModelSerializer):
    """
    Glavni serializer za strojeve/dizalice.
    """
    # Prikazuje naziv vlasnika (kupca) umjesto samo ID-a 
    # (source='vlasnik.naziv' jer je u modelu ForeignKey nazvan 'vlasnik')
    vlasnik_naziv = serializers.ReadOnlyField(source='vlasnik.naziv')
    
    # get_tip_display() pretvara 'dizalica_auto' u 'Autodizalica' (čitljivije za UI)
    tip_human_readable = serializers.CharField(source='get_tip_display', read_only=True)

    radni_nalozi = serializers.SerializerMethodField()

    class Meta:
        model = Stroj
        fields = [
            'id', 
            'vlasnik', 
            'vlasnik_naziv',
            'naziv', 
            'marka', 
            'model_stroja', 
            'serijski_broj', 
            'tip', 
            'tip_human_readable',
            'godina_proizvodnje', 
            'radni_sati', 
            'registracija',
            'datum_zadnjeg_atesta',
            'radni_nalozi',  # Novo polje
        ]
    
    def get_radni_nalozi(self, obj):
        # Lokalni import rješava kružni import error s operations aplikacijom
        from operations.serializers import RadniNalogSerializer
        
        # Dohvaćamo radne naloge i sortiramo ih tako da najnoviji budu prvi
        queryset = obj.radni_nalozi.all().order_by('-datum_kreiranja')
        
        # Vraćamo serijalizirane podatke
        return RadniNalogSerializer(queryset, many=True, context=self.context).data

class VoziloSerializer(serializers.ModelSerializer):
    """
    Osnovni serializer koji se koristi za Create/Update operacije.
    """
    class Meta:
        model = Vozilo
        fields = '__all__'

class VoziloListaSerializer(serializers.ModelSerializer):
    """
    Serializer za brzi prikaz u tablicama.
    """
    # Ljudski čitljiv status (npr. 'Na Servisu' umjesto 'servis')
    status_prikaz = serializers.CharField(source='get_status_display', read_only=True)
    
    class Meta:
        model = Vozilo
        fields = ['id', 'naziv', 'registracija', 'trenutni_kilometri', 'status', 'status_prikaz']

class VoziloListaSerializer(serializers.ModelSerializer):
    """
    Serializer za brzi prikaz u tablicama.
    """
    # Ljudski čitljiv status (npr. 'Na Servisu' umjesto 'servis')
    status_prikaz = serializers.CharField(source='get_status_display', read_only=True)
    
    class Meta:
        model = Vozilo
        fields = ['id', 'naziv', 'registracija', 'trenutni_kilometri', 'status', 'status_prikaz']

class VoziloDetaljiSerializer(serializers.ModelSerializer):
    """
    Serializer s dodatnom statistikom za detaljni prikaz vozila.
    """
    ukupno_predeno = serializers.SerializerMethodField()
    status_prikaz = serializers.CharField(source='get_status_display', read_only=True)

    putni_nalozi = serializers.SerializerMethodField()

    class Meta:
        model = Vozilo
        fields = [
            'id',
            'naziv',
            'registracija',
            'pocetni_kilometri', 
            'trenutni_kilometri',
            'ukupno_predeno',
            'status',
            'status_prikaz',
            'putni_nalozi',
        ]

    def get_ukupno_predeno(self, obj):
        """Izračunava razliku između trenutnih i početnih kilometara"""
        return obj.trenutni_kilometri - obj.pocetni_kilometri

    def get_putni_nalozi(self, obj):
        from operations.serializers import PutniNalogSerializer
        queryset = obj.putni_nalozi.all()
        return PutniNalogSerializer(queryset, many=True, context=self.context).data