from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.utils.translation import gettext_lazy as _
from users.models import ActivityLog, AuditLog, User


@admin.register(User)
class UserAdmin(BaseUserAdmin):
    list_display = ("email", "name", "role", "status", "is_active")
    list_filter = ("role", "status", "is_active", "is_staff")
    search_fields = ("email", "name")
    ordering = ("-created_at",)

    # Override standard fieldsets to natively match our custom JWT User Model
    fieldsets = (
        (None, {"fields": ("email", "password")}),
        (_("Personal info"), {"fields": ("name", "designation")}),
        (_("Assignment"), {"fields": ("checkpoint", "role", "status")}),
        (
            _("Permissions"),
            {
                "fields": (
                    "is_active",
                    "is_staff",
                    "is_superuser",
                    "groups",
                    "user_permissions",
                ),
            },
        ),
    )

    # Required for creating users natively through the admin interface securely
    add_fieldsets = (
        (
            None,
            {
                "classes": ("wide",),
                "fields": ("email", "name", "password1", "password2"),
            },
        ),
    )


@admin.register(AuditLog)
class AuditLogAdmin(admin.ModelAdmin):
    list_display = (
        "user",
        "action",
        "action_description",
        "method",
        "path",
        "status_code",
        "target_model",
        "ip_address",
        "created_at",
    )
    list_filter = ("action", "method", "status_code", "target_model")
    search_fields = (
        "path",
        "action_description",
        "user__email",
        "user__name",
        "ip_address",
        "target_model",
    )
    readonly_fields = (
        "user",
        "action",
        "action_description",
        "method",
        "path",
        "payload",
        "status_code",
        "ip_address",
        "target_model",
        "target_object_id",
        "query_params",
        "user_agent",
        "response_summary",
        "created_at",
        "updated_at",
    )

    def has_add_permission(self, request):
        return False

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


@admin.register(ActivityLog)
class ActivityLogAdmin(admin.ModelAdmin):
    list_display = (
        "activity",
        "user",
        "action",
        "target_model",
        "status_code",
        "created_at",
    )
    list_filter = ("action", "status_code", "target_model")
    search_fields = ("action_description", "user__email", "user__name", "target_model")
    readonly_fields = (
        "activity",
        "user",
        "action",
        "target_model",
        "target_object_id",
        "status_code",
        "created_at",
        "updated_at",
    )

    @admin.display(description="Activity")
    def activity(self, obj):
        return obj.activity_message

    def has_add_permission(self, request):
        return False

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