from django.contrib import admin
from django.utils.html import format_html
from .models import Dogadaj

@admin.register(Dogadaj)
class DogadajAdmin(admin.ModelAdmin):
    # 1. Postavke liste (Dashboard pregled)
    list_display = ('prikaz_naslova', 'tip_ikona', 'pocetak', 'kraj', 'get_izvrsitelj', 'link_na_rn')
    list_filter = ('tip', 'pocetak', 'serviser_u_kalendaru')
    search_fields = ('naslov', 'opis', 'radni_nalog__broj_naloga', 'klijent__naziv')
    ordering = ('-pocetak',)

    # 2. Optimizacija baze (Spriječava N+1 problem zbog @property-ja)
    def get_queryset(self, request):
        return super().get_queryset(request).select_related(
            'radni_nalog__izvrsitelj', 
            'serviser_u_kalendaru', 
            'klijent', 
            'vozilo'
        )

    # --- CUSTOM METODE ZA PRIKAZ ---

    def prikaz_naslova(self, obj):
        """Bojanje naslova prema tipu za brzu vizualnu orijentaciju"""
        boje = {
            'servis': '#2980b9',    # Plava
            'isporuka': '#27ae60',  # Zelena
            'sastanak': '#f39c12',  # Narančasta
            'biljeska': '#7f8c8d',  # Siva
        }
        boja = boje.get(obj.tip, 'black')
        return format_html('<span style="color: {}; font-weight: bold;">{}</span>', boja, obj.naslov)
    prikaz_naslova.short_description = "Naslov"

    def tip_ikona(self, obj):
        """Dodaje malu ikonu uz tip događaja"""
        ikone = {
            'servis': '🛠️',
            'isporuka': '🏗️',
            'sastanak': '🤝',
            'biljeska': '📝',
        }
        return format_html('{} {}', ikone.get(obj.tip, '📅'), obj.get_tip_display())
    tip_ikona.short_description = "Tip"

    def get_izvrsitelj(self, obj):
        """Prikazuje izvršitelja koristeći logiku iz model @property"""
        korisnik = obj.izvrsitelj
        if korisnik:
            return korisnik.get_full_name() or korisnik.username
        return format_html('<i style="color: #999;">Nije dodijeljeno</i>')
    get_izvrsitelj.short_description = "Izvršitelj (Serviser)"

    def link_na_rn(self, obj):
        """Prikazuje broj radnog naloga ako postoji"""
        if obj.radni_nalog:
            return format_html('<b>#{}</b>', obj.radni_nalog.broj_naloga)
        return "-"
    link_na_rn.short_description = "Radni Nalog"

    # 3. Organizacija polja u formi (Fieldsets)
    fieldsets = (
        ('Glavne informacije', {
            'fields': (('naslov', 'tip'), 'opis')
        }),
        ('Vrijeme održavanja', {
            'fields': (('pocetak', 'kraj'),)
        }),
        ('Poveznice sustava', {
            'fields': ('radni_nalog', 'klijent', 'vozilo'),
            'description': "Povežite događaj s klijentom ili radnim nalogom za bolju evidenciju."
        }),
        ('Odgovornost', {
            'fields': ('serviser_u_kalendaru',),
            'description': "NAPOMENA: Ako je povezan Radni Nalog, sustav ignorira ovo polje i koristi servisera s naloga."
        }),
    )

    # Postavljanje radnog naloga kao readonly ako želiš spriječiti ručno mijenjanje veza
    # readonly_fields = ('radni_nalog',)