from django.db import models
from django.core.exceptions import ValidationError


class Vozilo(models.Model):
    STATUS_CHOICES = [
        ('aktivan', 'Aktivan'),
        ('servis', 'Na Servisu'),
        ('neaktivan', 'Izvan Pogona'),
    ]

    naziv = models.CharField(max_length=50, verbose_name="Interni naziv")
    registracija = models.CharField(max_length=15, unique=True, db_index=True)
    
    # Kilometri
    pocetni_kilometri = models.PositiveIntegerField(default=0)
    trenutni_kilometri = models.PositiveIntegerField(default=0)
    
    status = models.CharField(
        max_length=20, 
        choices=STATUS_CHOICES, 
        default='aktivan'
    )

    class Meta:
        verbose_name = "Vozilo"
        verbose_name_plural = "Vozila"
        ordering = ['naziv']

    def clean(self):
        # Osnovna logika: trenutni kilometri ne smiju biti manji od početnih
        if self.trenutni_kilometri < self.pocetni_kilometri:
            raise ValidationError({
                'trenutni_kilometri': "Trenutni kilometri ne mogu biti manji od početnih."
            })

    def save(self, *args, **kwargs):
        # Logika za nove zapise
        if not self.pk:
            self.trenutni_kilometri = self.pocetni_kilometri
        
        self.registracija = self.registracija.upper().replace(" ", "")
        
        # Pozivamo clean() prije spremanja (Django to ne radi automatski u save())
        self.full_clean()
        super().save(*args, **kwargs)

    def __str__(self):
        return f"{self.naziv} ({self.registracija})"

class Stroj(models.Model):
    TIP_STROJA = [
        ('dizalica_toranj', 'Toranjska dizalica'),
        ('dizalica_auto', 'Autodizalica'),
        ('vilicar', 'Viličar'),
        ('platforma', 'Radna platforma'),
    ]

    # Poveznica s kupcem: Jedan kupac može imati mnogo strojeva
    # --- RJEŠENJE ZA LOOP: Koristimo string 'kupci.Kupac' ---
    vlasnik = models.ForeignKey(
        'kupci.Kupac', 
        on_delete=models.CASCADE, 
        related_name='strojevi',
        verbose_name="Vlasnik/Kupac"
    )
    
    naziv = models.CharField(max_length=100, help_text="Npr. Liebherr LTM 1030")
    serijski_broj = models.CharField(max_length=50, unique=True)
    marka = models.CharField(max_length=50, blank=True)
    model_stroja = models.CharField(max_length=50, blank=True)
    godina_proizvodnje = models.PositiveIntegerField(null=True, blank=True)
    tip = models.CharField(max_length=30, choices=TIP_STROJA)
    
    # Podaci za održavanje
    radni_sati = models.DecimalField(max_digits=12, decimal_places=2, default=0)
    registracija = models.CharField(max_length=20, blank=True, null=True, help_text="Za autodizalice i vozila")
    datum_zadnjeg_atesta = models.DateField(null=True, blank=True)

    class Meta:
        verbose_name = "Stroj"
        verbose_name_plural = "Strojevi"
        ordering = ['marka', 'model_stroja']

    def __str__(self):
        # Mala nadogradnja da ne vraća prazan string ako marka/model nedostaju
        oznaka = f"{self.marka} {self.model_stroja}".strip() or self.naziv
        return f"{oznaka} (S/N: {self.serijski_broj})"