from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.utils.translation import gettext_lazy as _
from import_export import resources
from import_export.admin import ImportExportModelAdmin

from .models import User


class UserResource(resources.ModelResource):
    class Meta:
        model = User
        skip_unchanged = True
        fields = (
            "id",
            # "password",
            "is_superuser",
            "email",
            "name",
            "is_staff",
            "is_active",
            "created",
        )


class UserAdmin(BaseUserAdmin, ImportExportModelAdmin):
    ordering = ("email",)
    list_display = (
        "email",
        "name",
        "organizations",
    )
    fieldsets = (
        (
            None,
            {
                "fields": (
                    "email",
                    "password",
                )
            },
        ),
        (
            _("Personal info"),
            {"fields": ("name", "subscribe_by_default", "analytics", "options")},
        ),
        (
            _("Permissions"),
            {
                "fields": (
                    "is_active",
                    "is_staff",
                    "is_superuser",
                    "groups",
                    "user_permissions",
                ),
            },
        ),
        (_("Important dates"), {"fields": ("last_login",)}),
    )
    add_fieldsets = (
        (
            None,
            {
                "classes": ("wide",),
                "fields": ("email", "password1", "password2"),
            },
        ),
    )
    search_fields = ("email", "name")
    readonly_fields = ("analytics",)
    resource_class = UserResource

    def get_queryset(self, request):
        return (
            super()
            .get_queryset(request)
            .prefetch_related("organizations_ext_organization")
        )

    def organizations(self, obj):
        return ", ".join([org.name for org in obj.organizations_ext_organization.all()])


admin.site.register(User, UserAdmin)