from django.contrib import admin

from user.models import UserNotification, UserActionLogEntry, User, Team


class UserNotificationAdmin(admin.ModelAdmin):
    list_display = [
        "id",
        "name",
        "is_active",
    ]


class UserAdmin(admin.ModelAdmin):
    list_display = [
        "id",
        "username",
        "first_name",
        "last_name",
        "email",
    ]
    fields = [
        "username",
        "first_name",
        "last_name",
        "email",
        "is_active",
        "is_staff",
        "is_superuser",
        "api_token",
        "groups",
        "notifications",
        "date_joined",
        "last_login",
    ]
    search_fields = [
        "username",
        "first_name",
        "last_name",
        "email",
    ]
    filter_horizontal = [
        "groups",
        "notifications",
    ]
    readonly_fields = [
        "date_joined",
        "last_login",
    ]
    autocomplete_fields = [
        "api_token",
    ]
    exclude = [
        "user_permissions",
    ]


class UserActionLogEntryAdmin(admin.ModelAdmin):
    list_display = [
        "id",
        "user",
        "timestamp",
        "action",
    ]


class TeamAdmin(admin.ModelAdmin):
    list_display = [
        "name",
        "description",
        "admin",
    ]
    search_fields = [
        "name",
        "description",
    ]
    filter_horizontal = [
        "users"
    ]

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "admin":
            team_id = request.resolver_match.kwargs.get("object_id", None)
            kwargs["queryset"] = User.objects.filter(teams__id__in=[team_id])
        return super().formfield_for_foreignkey(db_field, request, **kwargs)


admin.site.register(User, UserAdmin)
admin.site.register(Team, TeamAdmin)

# Outcommented for a cleaner admin backend on production
#admin.site.register(UserNotification, UserNotificationAdmin)
#admin.site.register(UserActionLogEntry, UserActionLogEntryAdmin)