from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin

from .models import User, ReuMietV, ReuEigentuemer, NutzerAnmeldung, NutzerBesuch
from app_admin.mixins import ReadOnlyAdmin


@admin.register(User)
class UserAdmin(BaseUserAdmin):
    list_display = ('PersonenID', 'email', 'lastname', 'firstname', 'companyname', 'is_staff', 'last_login')
    search_fields = ('email', 'lastname', 'firstname')
    ordering = ('email',)
    filter_horizontal = ()

    # Übersicht + Passwort ändern erlaubt
    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('Persönliche Angaben', {'fields': ('PersonenID', 'lastname', 'firstname', 'companyname',
                                            'SalutationID', 'SaAnrede', 'SaAnschrift', 'SaBriefkopf')}),
        ('Berechtigungen', {'fields': ('is_active', 'is_staff', 'is_superuser')}),
        ('Wichtige Daten', {'fields': ('last_login', 'last_login_ip')}),
    )
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'PersonenID', 'password1', 'password2'),
        }),
    )

    # Alles readonly außer Passwort
    def get_readonly_fields(self, request, obj=None):
        if obj:  # Bearbeitungsformular
            return (
                'email', 'PersonenID', 'lastname', 'firstname', 'companyname',
                'SalutationID', 'SaAnrede', 'SaAnschrift', 'SaBriefkopf',
                'is_active', 'is_staff', 'is_superuser',
                'last_login', 'last_login_ip',
            )
        return ()

    # Kein Hinzufügen, kein Löschen
    def has_add_permission(self, request):
        return False

    def has_delete_permission(self, request, obj=None):
        return False


@admin.register(ReuMietV)
class ReuMietVAdmin(ReadOnlyAdmin):
    list_display = ('MietVID', 'REUID', 'MieterID', 'ContractValidFrom', 'ContractValidUntil')
    
    def has_change_permission(self, request, obj=None):
        return False
    
    def has_add_permission(self, request):
        return False
    
    def has_delete_permission(self, request, obj=None):
        return False

@admin.register(ReuEigentuemer)
class ReuEigentuemerAdmin(ReadOnlyAdmin):
    """Eigentumsverhaeltnisse - Gegenstueck zu ReuMietVAdmin.

    Wie dort read-only: die Daten kommen aus xin und werden per
    PUT /api/eigentuemer ueberschrieben. Aenderungen hier waeren beim
    naechsten Sync wieder weg.
    """
    list_display = ('EigentumID', 'REUID', 'EigentuemerID', 'ValidFrom', 'ValidUntil')
    search_fields = ('EigentuemerID',)
    ordering = ('-ValidFrom', '-EigentumID')

    def has_change_permission(self, request, obj=None):
        return False

    def has_add_permission(self, request):
        return False

    def has_delete_permission(self, request, obj=None):
        return False


@admin.register(NutzerAnmeldung)
class NutzerAnmeldungAdmin(ReadOnlyAdmin):
    """Anmelde-Log inkl. IP (Missbrauchspruefung). Read-only."""
    list_display = ('zeitpunkt', 'PersonenID', 'erfolgreich', 'ip')
    list_filter = ('erfolgreich',)
    search_fields = ('PersonenID', 'ip_info__ip')
    ordering = ('-zeitpunkt',)
    list_select_related = ('ip_info',)

    @admin.display(description='IP')
    def ip(self, obj):
        ip_info = getattr(obj, 'ip_info', None)
        return ip_info.ip if ip_info else '-'


@admin.register(NutzerBesuch)
class NutzerBesuchAdmin(ReadOnlyAdmin):
    list_display = ('tag', 'PersonenID', 'erster_zugriff')
    search_fields = ('PersonenID',)
    ordering = ('-tag',)
