from rest_framework import serializers
from .models import Kupac
from fleet.models import Stroj

from fleet.serializers import StrojSerializer

class KupacSerializer(serializers.ModelSerializer):
    """
    Serializer za listu kupaca. 
    Fokus je na brzini i osnovnim kontaktnim podacima.
    """
    # Izračunato polje iz modela (@property broj_strojeva)
    broj_strojeva = serializers.IntegerField(read_only=True)

    class Meta:
        model = Kupac
        fields = [
            'id', 
            'naziv', 
            'grad', 
            'telefon', 
            'email', 
            'tip', 
            'aktivno',
            'broj_strojeva' # Korisno za prikaz u tablici (npr. "5 strojeva")
        ]

class KupacDetaljiSerializer(serializers.ModelSerializer):
    # Ugniježđeni strojevi - prikazujemo puni objekt, ne samo ID
    strojevi = StrojSerializer(many=True, read_only=True)
    
    # Dodatna polja koja nisu u bazi, ali su korisna za Astro frontend
    ukupan_broj_strojeva = serializers.IntegerField(source='broj_strojeva', read_only=True)
    
    class Meta:
        model = Kupac
        fields = [
            'id', 
            'naziv', 
            'oib', 
            'email', 
            'telefon', 
            'adresa', 
            'grad', 
            'postanski_broj',
            'tip', 
            'napomena',
            'aktivno',
            'datum_kreiranja',
            'ukupan_broj_strojeva',
            'strojevi'  # Lista svih strojeva s punim detaljima
        ]

class KupacListaSerializer(serializers.ModelSerializer):
    """
    Optimizirani serializer za prikaz u tablici (listi).
    Vraća samo osnovne podatke potrebne za pregled svih klijenata.
    """
    # Dohvaćamo property iz modela koji broji strojeve
    broj_strojeva = serializers.IntegerField(read_only=True)

    class Meta:
        model = Kupac
        fields = [
            'id', 
            'naziv', 
            'grad', 
            'oib',
            'telefon', 
            'tip', 
            'aktivno',
            'broj_strojeva'
        ]