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.memberships.models import Membership


@admin.register(Membership)
class MembershipAdmin(UnfoldModelAdmin):
    list_display = ("__str__", "tenant", "organization_node", "role", "status", "users_count_display")
    list_filter = ("tenant", "status", "role")
    search_fields = ("users__email", "organization_node__name", "role__name")
    readonly_fields = ("public_id", "created_at", "updated_at")
    filter_horizontal = ("users",)
    autocomplete_fields = ("tenant", "organization_node", "role")
    fieldsets = (
        (None, {
            "fields": (
                "tenant", "organization_node", "role",
            ),
        }),
        ("کاربران", {
            "fields": ("users",),
            "description": "کاربرانی که به این گره سازمانی با این نقش دسترسی دارند",
        }),
        ("وضعیت", {
            "fields": ("status", "scope_extra"),
        }),
        ("متادیتا", {
            "fields": ("public_id", "created_at", "updated_at"),
            "classes": ("collapse",),
        }),
    )

    @admin.display(description="تعداد کاربران")
    def users_count_display(self, obj: Membership) -> int:
        return obj.users.count()
