from django.contrib import admin

from ..models import BankTransaction, Rentmeister, StiftungsKonto, Verwaltungskosten


@admin.register(Rentmeister)
class RentmeisterAdmin(admin.ModelAdmin):
    list_display = [
        "__str__",
        "email",
        "telefon",
        "seit_datum",
        "bis_datum",
        "aktiv",
        "monatliche_verguetung",
    ]
    list_filter = ["aktiv", "seit_datum", "anrede"]
    search_fields = ["vorname", "nachname", "email", "telefon", "ort"]
    ordering = ["nachname", "vorname"]
    readonly_fields = ["id", "erstellt_am", "aktualisiert_am"]

    fieldsets = (
        ("Persönliche Daten", {"fields": ("anrede", "vorname", "nachname", "titel")}),
        (
            "Kontaktdaten",
            {"fields": ("email", "telefon", "mobil", "strasse", "plz", "ort")},
        ),
        (
            "Bankdaten",
            {"fields": ("iban", "bic", "bank_name"), "classes": ["collapse"]},
        ),
        (
            "Stiftungsdaten",
            {
                "fields": (
                    "seit_datum",
                    "bis_datum",
                    "aktiv",
                    "monatliche_verguetung",
                    "km_pauschale",
                )
            },
        ),
        (
            "Zusätzliche Informationen",
            {"fields": ("notizen",), "classes": ["collapse"]},
        ),
        (
            "System",
            {
                "fields": ("id", "erstellt_am", "aktualisiert_am"),
                "classes": ["collapse"],
            },
        ),
    )


@admin.register(StiftungsKonto)
class StiftungsKontoAdmin(admin.ModelAdmin):
    list_display = [
        "kontoname",
        "bank_name",
        "konto_typ",
        "saldo",
        "saldo_datum",
        "aktiv",
    ]
    list_filter = ["konto_typ", "aktiv", "bank_name"]
    search_fields = ["kontoname", "bank_name", "iban"]
    ordering = ["bank_name", "kontoname"]
    readonly_fields = ["id", "erstellt_am", "aktualisiert_am"]

    fieldsets = (
        (
            "Kontodaten",
            {"fields": ("kontoname", "bank_name", "iban", "bic", "konto_typ")},
        ),
        (
            "Finanzdaten",
            {"fields": ("saldo", "saldo_datum", "zinssatz", "laufzeit_bis")},
        ),
        ("Status", {"fields": ("aktiv", "notizen")}),
        (
            "System",
            {
                "fields": ("id", "erstellt_am", "aktualisiert_am"),
                "classes": ["collapse"],
            },
        ),
    )


@admin.register(Verwaltungskosten)
class VerwaltungskostenAdmin(admin.ModelAdmin):
    list_display = [
        "bezeichnung",
        "kategorie",
        "betrag",
        "datum",
        "status",
        "rentmeister",
        "konto",
    ]
    list_filter = ["kategorie", "status", "datum", "rentmeister", "konto"]
    search_fields = [
        "bezeichnung",
        "lieferant_firma",
        "rechnungsnummer",
        "beschreibung",
    ]
    ordering = ["-datum", "-erstellt_am"]
    readonly_fields = ["id", "erstellt_am", "aktualisiert_am"]
    date_hierarchy = "datum"

    fieldsets = (
        (
            "Grunddaten",
            {"fields": ("bezeichnung", "kategorie", "betrag", "datum", "status")},
        ),
        ("Zuordnung", {"fields": ("rentmeister", "konto")}),
        (
            "Lieferant/Rechnung",
            {"fields": ("lieferant_firma", "rechnungsnummer"), "classes": ["collapse"]},
        ),
        (
            "Fahrtkosten",
            {
                "fields": ("km_anzahl", "km_satz", "von_ort", "nach_ort", "zweck"),
                "classes": ["collapse"],
                "description": 'Nur für Kategorie "Fahrtkosten" relevant',
            },
        ),
        (
            "Zusätzliche Informationen",
            {"fields": ("beschreibung", "notizen"), "classes": ["collapse"]},
        ),
        (
            "System",
            {
                "fields": ("id", "erstellt_am", "aktualisiert_am"),
                "classes": ["collapse"],
            },
        ),
    )


@admin.register(BankTransaction)
class BankTransactionAdmin(admin.ModelAdmin):
    list_display = [
        "datum",
        "konto",
        "betrag",
        "empfaenger_zahlungspflichtiger",
        "transaction_type",
        "status",
        "verwaltungskosten",
    ]
    list_filter = ["konto", "transaction_type", "status", "datum", "importiert_am"]
    search_fields = ["verwendungszweck", "empfaenger_zahlungspflichtiger", "referenz"]
    readonly_fields = ["importiert_am", "import_datei"]
    ordering = ["-datum", "-importiert_am"]

    fieldsets = (
        ("Basisdaten", {"fields": ("konto", "datum", "valuta", "betrag", "waehrung")}),
        (
            "Transaktionsdetails",
            {
                "fields": (
                    "verwendungszweck",
                    "empfaenger_zahlungspflichtiger",
                    "iban_gegenpartei",
                    "bic_gegenpartei",
                    "referenz",
                    "transaction_type",
                )
            },
        ),
        ("Verwaltung", {"fields": ("status", "kommentare", "verwaltungskosten")}),
        (
            "Import-Information",
            {
                "fields": ("import_datei", "importiert_am", "saldo_nach_buchung"),
                "classes": ("collapse",),
            },
        ),
    )

    def get_queryset(self, request):
        return (
            super().get_queryset(request).select_related("konto", "verwaltungskosten")
        )
