# app_home/admin.py

from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from .models import Funcionario, Empresa

# 1. Inline do Funcionário (Perfil anexado ao usuário)
class FuncionarioInline(admin.StackedInline):
    model = Funcionario
    can_delete = False
    verbose_name_plural = 'Perfil do Funcionário'
    fk_name = 'user'

# 2. Desregistra o User padrão para usarmos o nosso personalizado
admin.site.unregister(User)

# 3. Define e Registra o nosso UserAdmin Customizado
@admin.register(User)
class CustomUserAdmin(BaseUserAdmin):
    # Adiciona o perfil de funcionário na tela de usuário
    inlines = (FuncionarioInline,)
    
    # --- Configurações Visuais da Lista ---
    list_display = ('username', 'email', 'first_name', 'last_name', 'get_empresa', 'is_active', 'is_staff')
    list_filter = ('is_active', 'is_staff', 'date_joined', 'funcionario__empresa')
    search_fields = ('username', 'first_name', 'last_name', 'email', 'funcionario__empresa__nome_fantasia')
    ordering = ('first_name',)

    # Mostra a empresa na tabela
    @admin.display(description='Empresa', ordering='funcionario__empresa')
    def get_empresa(self, obj):
        return obj.funcionario.empresa if hasattr(obj, 'funcionario') and obj.funcionario.empresa else '-'

    # --- FILTRO DE PERMISSÕES (LIMPEZA) ---
    # Este método remove as permissões "inúteis" da caixa de seleção
    def formfield_for_manytomany(self, db_field, request, **kwargs):
        form_field = super().formfield_for_manytomany(db_field, request, **kwargs)
        
        if db_field.name == "user_permissions":
            qs = form_field.queryset
            # Remove permissões de apps técnicos que poluem a lista
            qs = qs.exclude(content_type__app_label__in=[
                'socialaccount', 
                'account', 
                'sites', 
                'admin', 
                'contenttypes', 
                'sessions',
                'auth' # Opcional: remove permissões básicas do Django se quiser
            ])
            form_field.queryset = qs
            
        return form_field

# 4. Registro da Empresa
@admin.register(Empresa)
class EmpresaAdmin(admin.ModelAdmin):
    list_display = ('razao_social', 'nome_fantasia')