from rest_framework import serializers
from .models import RadniNalog, RadniNalogSlika
from kupci.serializers import KupacListaSerializer
from fleet.serializers import VoziloListaSerializer, StrojSerializer

# --- POMOĆNI SERIALIZER ZA SLIKE ---
class RadniNalogSlikaSerializer(serializers.ModelSerializer):
    class Meta:
        model = RadniNalogSlika
        fields = ['id', 'slika', 'opis']

# --- 1. LISTA SERIALIZER ---
class RadniNalogListaSerializer(serializers.ModelSerializer):
    klijent_naziv = serializers.CharField(source='klijent.naziv', read_only=True)
    stroj_naziv = serializers.CharField(source='stroj.naziv', read_only=True)
    izvrsitelj_ime = serializers.CharField(source='izvrsitelj.get_full_name', read_only=True)

    class Meta:
        model = RadniNalog
        fields = [
            'id',
            'broj_naloga',
            'klijent_naziv',
            'stroj_naziv', 
            'status',
            'izvrsitelj_ime',
            'datum_kreiranja'
        ]

# --- 2. DETALJI SERIALIZER ---
class RadniNalogDetaljiSerializer(serializers.ModelSerializer):
    klijent = KupacListaSerializer(read_only=True)
    stroj = StrojSerializer(read_only=True)
    slike = RadniNalogSlikaSerializer(many=True, read_only=True)
    
    # VOZILO dohvaćamo preko putnog naloga
    vozilo = serializers.SerializerMethodField()
    
    status_display = serializers.CharField(source='get_status_display', read_only=True)
    izvrsitelj_ime = serializers.CharField(source='izvrsitelj.get_full_name', read_only=True)

    class Meta:
        model = RadniNalog
        fields = [
            'id', 'broj_naloga', 'klijent', 'stroj', 'putni_nalog', 'vozilo', 'opis_kvara', 
            'izvrsitelj', 'izvrsitelj_ime', 'status', 'status_display', 
            'datum_kreiranja', 'datum_azuriranja', 'slika_kvara', 
            'potpis_klijenta', 'slike'
        ]
        read_only_fields = ['datum_kreiranja', 'datum_azuriranja']

    def get_vozilo(self, obj):
        # Ako je radni nalog vezan za putni nalog, vrati podatke o vozilu
        if obj.putni_nalog and obj.putni_nalog.vozilo:
            return {
                "id": obj.putni_nalog.vozilo.id,
                "naziv": obj.putni_nalog.vozilo.naziv,
                "registracija": obj.putni_nalog.vozilo.registracija,
                "trenutni_kilometri": obj.putni_nalog.vozilo.trenutni_kilometri
            }
        return None

# --- 3. DEFAULT SERIALIZER ---
class RadniNalogSerializer(serializers.ModelSerializer):
    # Dozvoljavamo unos, ali nije obavezan ako ga backend generira
    broj_naloga = serializers.CharField(required=False, read_only=True)

    class Meta:
        model = RadniNalog
        exclude = []

    def validate_broj_naloga(self, value):
        # Provjera jedinstvenosti prije nego što dođe do baze
        if RadniNalog.objects.filter(broj_naloga=value).exists():
            raise serializers.ValidationError("Radni nalog s ovim brojem već postoji.")
        return value

    def validate(self, data):
        # Tvoja postojeća validacija klijenta i stroja
        stroj = data.get('stroj')
        klijent = data.get('klijent')
        if stroj and klijent and stroj.vlasnik != klijent:
            raise serializers.ValidationError(
                {"stroj": "Odabrani stroj ne pripada odabranom klijentu."}
            )
        return data