from __future__ import annotations

from django.contrib import admin

try:
    from unfold.admin import ModelAdmin as UnfoldModelAdmin
except ImportError:
    UnfoldModelAdmin = admin.ModelAdmin  # type: ignore[assignment]

from simorgh.apps.iam.models import Permission, Policy, Role, UserRole


@admin.register(Permission)
class PermissionAdmin(UnfoldModelAdmin):
    list_display = ("codename", "module", "resource", "action", "label")
    list_filter = ("module", "resource", "action")
    search_fields = ("codename", "label")
    readonly_fields = ("created_at", "updated_at")


@admin.register(Role)
class RoleAdmin(UnfoldModelAdmin):
    list_display = ("code", "tenant", "name", "is_system")
    list_filter = ("tenant", "is_system")
    search_fields = ("code", "name")
    filter_horizontal = ("permissions",)
    readonly_fields = ("public_id", "created_at", "updated_at")


@admin.register(Policy)
class PolicyAdmin(UnfoldModelAdmin):
    list_display = ("role", "permission", "name", "is_active")
    list_filter = ("is_active",)
    search_fields = ("name",)
    readonly_fields = ("public_id", "created_at", "updated_at")


@admin.register(UserRole)
class UserRoleAdmin(UnfoldModelAdmin):
    list_display = ("user", "role", "created_at")
    list_filter = ("role",)
    search_fields = ("user__username", "user__email", "role__name")
    readonly_fields = ("created_at", "updated_at")
    raw_id_fields = ("user", "role")
    ordering = ("-created_at",)
