from django.contrib import admin, messages
from django.contrib.auth.admin import UserAdmin
from django.db.models import Q

from subscriptions.access import ensure_platform_admin_subscriptions

from .models import User


@admin.register(User)
class CustomUserAdmin(UserAdmin):
    list_display = (
        'username',
        'email',
        'role',
        'subscription_status',
        'is_staff',
        'is_active',
    )
    list_filter = ('role', 'is_staff', 'is_active')
    actions = ('grant_permanent_subscriptions',)
    fieldsets = UserAdmin.fieldsets + (
        ('PEZAJOB', {'fields': ('role', 'phone', 'avatar')}),
    )
    add_fieldsets = UserAdmin.add_fieldsets + (
        ('PEZAJOB', {'fields': ('role', 'phone')}),
    )

    @admin.display(description='Subscription')
    def subscription_status(self, obj):
        if obj.is_platform_admin:
            return 'Permanent (admin)'
        sub = getattr(obj, 'seeker_subscription', None)
        if sub and sub.is_valid:
            return sub.plan.name
        if sub:
            return 'Expired / inactive'
        return '—'

    @admin.action(description='Grant permanent subscriptions (platform admins)')
    def grant_permanent_subscriptions(self, request, queryset):
        count = 0
        for user in queryset.filter(Q(role=User.Role.ADMIN) | Q(is_superuser=True)):
            ensure_platform_admin_subscriptions(user)
            count += 1
        self.message_user(
            request,
            f'Permanent subscriptions ensured for {count} administrator(s).',
            messages.SUCCESS,
        )
