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

from ..models import Land, LandVerpachtung, Paechter


@admin.register(Paechter)
class PaechterAdmin(admin.ModelAdmin):
    list_display = [
        "nachname",
        "vorname",
        "pachtnummer",
        "pachtzins_aktuell",
        "landwirtschaftliche_ausbildung",
        "aktiv",
    ]
    list_filter = ["landwirtschaftliche_ausbildung", "aktiv"]
    search_fields = ["nachname", "vorname", "email", "pachtnummer"]
    ordering = ["nachname", "vorname"]
    readonly_fields = ["id"]

    fieldsets = (
        (
            "Persönliche Daten",
            {"fields": ("vorname", "nachname", "geburtsdatum", "email", "telefon")},
        ),
        (
            "Pacht-Informationen",
            {
                "fields": (
                    "pachtnummer",
                    "pachtbeginn_erste",
                    "pachtende_letzte",
                    "pachtzins_aktuell",
                )
            },
        ),
        (
            "Landwirtschaftliche Qualifikation",
            {
                "fields": (
                    "landwirtschaftliche_ausbildung",
                    "berufserfahrung_jahre",
                    "spezialisierung",
                )
            },
        ),
        ("Kontaktdaten", {"fields": ("iban", "strasse", "plz", "ort")}),
        ("Pächter-Typ", {"fields": ("personentyp",)}),
        ("Zusätzlich", {"fields": ("notizen", "aktiv")}),
        ("System", {"fields": ("id",), "classes": ("collapse",)}),
    )

    def iban_display(self, obj):
        if obj.iban:
            return format_html(
                '<span style="font-family: monospace;">{}</span>', obj.iban
            )
        return "-"

    iban_display.short_description = "IBAN"


@admin.register(Land)
class LandAdmin(admin.ModelAdmin):
    list_display = [
        "lfd_nr",
        "gemeinde",
        "gemarkung",
        "flur",
        "flurstueck",
        "groesse_qm",
        "verp_flaeche_aktuell",
        "verpachtungsgrad_display",
        "aktiv",
    ]
    list_filter = ["gemeinde", "gemarkung", "aktiv"]
    search_fields = ["lfd_nr", "gemeinde", "gemarkung", "flur", "flurstueck"]
    ordering = ["gemeinde", "gemarkung", "flur", "flurstueck"]
    readonly_fields = ["id", "gesamtflaeche_berechnet", "verpachtungsgrad_berechnet"]

    fieldsets = (
        ("Identifikation", {"fields": ("lfd_nr", "ew_nummer")}),
        ("Gerichtliche Zuständigkeit", {"fields": ("amtsgericht",)}),
        (
            "Verwaltungsstruktur",
            {"fields": ("gemeinde", "gemarkung", "flur", "flurstueck")},
        ),
        (
            "Flächenangaben",
            {
                "fields": (
                    "groesse_qm",
                    "gruenland_qm",
                    "acker_qm",
                    "wald_qm",
                    "sonstiges_qm",
                )
            },
        ),
        (
            "Verpachtung",
            {
                "fields": (
                    "verpachtete_gesamtflaeche",
                    "flaeche_alte_liste",
                    "verp_flaeche_aktuell",
                )
            },
        ),
        ("Steuern und Abgaben", {"fields": ("anteil_grundsteuer", "anteil_lwk")}),
        ("Status", {"fields": ("aktiv", "notizen")}),
        (
            "System",
            {
                "fields": ("id", "erstellt_am", "aktualisiert_am"),
                "classes": ("collapse",),
            },
        ),
    )

    def verpachtungsgrad_display(self, obj):
        grad = obj.get_verpachtungsgrad()
        if grad > 90:
            color = "green"
        elif grad > 70:
            color = "orange"
        else:
            color = "red"
        return format_html('<span style="color: {};">{:.1f}%</span>', color, grad)

    verpachtungsgrad_display.short_description = "Verpachtungsgrad"

    def gesamtflaeche_berechnet(self, obj):
        return f"{obj.get_gesamtflaeche():.2f} qm"

    gesamtflaeche_berechnet.short_description = "Berechnete Gesamtfläche"

    def verpachtungsgrad_berechnet(self, obj):
        return f"{obj.get_verpachtungsgrad():.1f}%"

    verpachtungsgrad_berechnet.short_description = "Verpachtungsgrad"


@admin.register(LandVerpachtung)
class LandVerpachtungAdmin(admin.ModelAdmin):
    list_display = [
        "land",
        "paechter",
        "pachtzins_pauschal",
        "pachtbeginn",
        "pachtende",
        "status_display",
        "erstellt_am",
    ]
    list_filter = ["status", "pachtbeginn", "pachtende", "erstellt_am"]
    search_fields = ["land__lfd_nr", "land__gemeinde", "paechter__vorname", "paechter__nachname", "vertragsnummer"]
    ordering = ["-erstellt_am"]
    readonly_fields = ["id", "erstellt_am", "aktualisiert_am"]

    fieldsets = (
        ("Verpachtungsdetails", {
            "fields": ("land", "paechter", "vertragsnummer", "status")
        }),
        ("Laufzeit", {
            "fields": ("pachtbeginn", "pachtende", "verlaengerung_klausel")
        }),
        ("Fläche", {
            "fields": ("verpachtete_flaeche",)
        }),
        ("Pachtzins", {
            "fields": ("pachtzins_pauschal", "pachtzins_pro_ha", "zahlungsweise")
        }),
        ("Umsatzsteuer", {
            "fields": ("ust_option", "ust_satz"),
            "classes": ("collapse",)
        }),
        ("Umlagen", {
            "fields": ("grundsteuer_umlage", "versicherungen_umlage", "verbandsbeitraege_umlage", "jagdpacht_anteil_umlage"),
            "classes": ("collapse",)
        }),
        ("Zusatzinformationen", {
            "fields": ("bemerkungen",),
            "classes": ("collapse",)
        }),
        ("System", {
            "fields": ("id", "erstellt_am", "aktualisiert_am"),
            "classes": ("collapse",)
        }),
    )

    def status_display(self, obj):
        colors = {
            'aktiv': 'green',
            'beendet': 'red',
            'geplant': 'orange',
            'gekündigt': 'red'
        }
        color = colors.get(obj.status, 'black')
        return format_html(
            '<span style="color: {}; font-weight: bold;">{}</span>',
            color,
            obj.get_status_display()
        )

    status_display.short_description = "Status"
