from django.contrib import admin
from django.urls import reverse
from django.utils.safestring import mark_safe
from .models import Stroj, Vozilo
from operations.models import RadniNalog, PutniNalog  # Importamo modele iz druge aplikacije

# --- INLINE KLASE ---

class PutniNalogInline(admin.TabularInline):
    """Prikazuje putne naloge unutar pregleda vozila."""
    model = PutniNalog
    extra = 0
    fields = ('broj_naloga', 'datum_izdavanja', 'korisnik', 'pocetna_km', 'zavrsna_km', 'status')
    readonly_fields = ('broj_naloga', 'datum_izdavanja', 'korisnik', 'pocetna_km', 'zavrsna_km', 'status')
    can_delete = False
    verbose_name = "Povijest putovanja"
    verbose_name_plural = "Povijest putovanja za ovo vozilo"

class RadniNalogInline(admin.TabularInline):
    model = RadniNalog
    extra = 0
    # Umjesto običnog polja 'broj_naloga', koristimo metodu 'link_na_nalog'
    fields = ('link_na_nalog', 'datum_kreiranja', 'klijent', 'izvrsitelj', 'status')
    readonly_fields = ('link_na_nalog', 'datum_kreiranja', 'klijent', 'izvrsitelj', 'status')
    can_delete = False

    def link_na_nalog(self, obj):
        if obj.id:
            # Generiramo URL za admin promjenu Radnog Naloga
            url = reverse('admin:operations_radninalog_change', args=[obj.id])
            return mark_safe(f'<a href="{url}" style="font-weight:bold;">RN-{obj.broj_naloga}</a>')
        return "-"
    
    link_na_nalog.short_description = 'Broj naloga'

# --- GLAVNE ADMIN KLASE ---

@admin.register(Vozilo)
class VoziloAdmin(admin.ModelAdmin):
    list_display = ('naziv', 'registracija', 'status', 'pocetni_kilometri', 'trenutni_kilometri')
    search_fields = ('naziv', 'registracija')
    list_filter = ('status',)
    ordering = ('naziv',)
    
    # Dodajemo inline za putne naloge
    inlines = [PutniNalogInline]

@admin.register(Stroj)
class StrojAdmin(admin.ModelAdmin):
    list_display = (
        'serijski_broj', 
        'prikaz_naziva', 
        'vlasnik', 
        'tip', 
        'radni_sati', 
        'registracija',
        'datum_zadnjeg_atesta'
    )
    
    search_fields = (
        'serijski_broj', 
        'naziv', 
        'marka', 
        'model_stroja', 
        'vlasnik__naziv', 
        'vlasnik__oib'
    )
    
    list_filter = ('tip', 'marka', 'vlasnik')
    autocomplete_fields = ['vlasnik']
    
    # Dodajemo inline za radne naloge
    inlines = [RadniNalogInline]
    
    fieldsets = (
        ('Osnovne informacije', {
            'fields': ('vlasnik', 'naziv', 'tip', 'serijski_broj')
        }),
        ('Detalji o modelu', {
            'fields': (('marka', 'model_stroja'), 'godina_proizvodnje')
        }),
        ('Tehnički podaci i održavanje', {
            'fields': ('radni_sati', 'registracija', 'datum_zadnjeg_atesta'),
            'classes': ('collapse',)
        }),
    )

    def prikaz_naziva(self, obj):
        return f"{obj.marka} {obj.model_stroja}".strip() or obj.naziv
    prikaz_naziva.short_description = 'Marka i Model'