from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User

from .models import (
    Company, 
    CostCenter, 
    EmployeeProfile, 
    VacationRequest, 
    VacationLog
)

# Extend UserAdmin to incluir perfil de colaborador
class EmployeeProfileInline(admin.StackedInline):
    model = EmployeeProfile
    can_delete = False
    verbose_name_plural = 'Perfil de Colaborador'

class UserAdmin(BaseUserAdmin):
    inlines = (EmployeeProfileInline,)
    list_display = ('username', 'email', 'first_name', 'last_name', 'get_role', 'get_company', 'is_active')

    def get_role(self, obj):
        if hasattr(obj, 'profile'):
            return obj.profile.get_role_display()
        return "-"

    def get_company(self, obj):
        if hasattr(obj, 'profile'):
            return obj.profile.company.name
        return "-"

    get_role.short_description = 'Papel'
    get_company.short_description = 'Empresa'

# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)

@admin.register(Company)
class CompanyAdmin(admin.ModelAdmin):
    list_display = ('name', 'cnpj', 'is_active')
    search_fields = ('name', 'cnpj')
    list_filter = ('is_active',)

@admin.register(CostCenter)
class CostCenterAdmin(admin.ModelAdmin):
    list_display = ('code', 'name', 'company', 'is_active')
    search_fields = ('code', 'name')
    list_filter = ('company', 'is_active')

@admin.register(VacationRequest)
class VacationRequestAdmin(admin.ModelAdmin):
    list_display = (
        'employee', 'start_date', 'end_date', 'total_days',
        'selling_days', 'status', 'is_manual', 'created_at'
    )
    list_filter = ('status', 'is_manual', 'start_date', 'employee__company')
    search_fields = (
        'employee__user__first_name',
        'employee__user__last_name',
        'employee__employee_id'
    )
    date_hierarchy = 'start_date'
    readonly_fields = ('created_at', 'updated_at')

    # Campos exibidos no formulário de criação/edição
    fields = (
        'employee', 'start_date', 'end_date', 'selling_days',
        'status', 'is_manual', 'approved_by', 'approval_date',
        'rejection_reason', 'created_at', 'updated_at'
    )

@admin.register(VacationLog)
class VacationLogAdmin(admin.ModelAdmin):
    list_display = ('action', 'vacation_request', 'performed_by', 'created_at')
    list_filter = ('action', 'created_at')
    search_fields = ('vacation_request__employee__user__first_name', 'performed_by__username')
    readonly_fields = ('created_at', 'updated_at')
