from django.contrib import admin
from .models import Usuario
from django.contrib.admin.models import LogEntry

class CustomUserAdmin(admin.ModelAdmin):
    # Garantir que o usuário Staff não veja os outros usuários do sistema
    def get_queryset(self, request):
        qs = super().get_queryset(request)

        if not request.user.is_superuser:
            qs = qs.exclude(is_superuser=True, is_staff=True)
        return qs
    
    # garantir que os usuarios staff não consigam alterar campos cruciais
    def get_form(self, request, obj=None, **kwargs):
        form = super().get_form(request, obj, **kwargs)
        is_superuser = request.user.is_superuser

        if not is_superuser and obj is not None:
            form.base_fields['username'].disabled = True
            form.base_fields['is_superuser'].disabled = True
            form.base_fields['user_permissions'].disabled = True
            form.base_fields['groups'].disabled = True
            form.base_fields['is_active'].disabled = True
            form.base_fields['is_staff'].disabled = True
            form.base_fields['is_escritor'].disabled = True
            form.base_fields['is_leitor_especial'].disabled = True
            form.base_fields['groups'].disabled = True

        return form

    list_display = ('email', 'first_name', 'last_name', 'is_staff')
    list_filter = ('is_staff',)
    search_fields = ('email', 'first_name', 'last_name')
    ordering = ('email',)
    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('Informações Pessoais', {'fields': ('avatar', 'first_name', 'last_name','bio')}),
        ('Permissões', {'fields': ('is_staff', 'is_active', 'is_superuser', 'is_escritor', 'is_leitor_especial', 'groups')}),
    )

@admin.register(LogEntry)
class LogEntryAdmin(admin.ModelAdmin):
    #list_display = ('user', 'content_type', 'object_id', 'action_flag', 'change_message')
    list_display = ('action_time', 'user', 'content_type', 'object_repr', 'action_flag')
    list_filter = ('action_flag', 'user')
    search_fields = ('object_repr',)

admin.site.register(Usuario, CustomUserAdmin)