from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from .models import User, Profile, Department, Role, UserRole

class ProfileInline(admin.StackedInline):
    model = Profile
    can_delete = False
    fk_name = "user"

class UserRoleInline(admin.TabularInline):
    model = UserRole
    extra = 0
    fk_name = "user"

@admin.register(User)
class UserAdmin(BaseUserAdmin):
    inlines = [ProfileInline, UserRoleInline]
    list_display = ["email", "first_name", "last_name", "is_active", "date_joined"]
    list_filter = ["is_active", "is_staff", "date_joined"]
    search_fields = ["email", "first_name", "last_name"]
    ordering = ["-date_joined"]
    
    fieldsets = (
        ("Authentication", {
            "fields": ("email", "password")
        }),
        ("Personal Information", {
            "fields": ("first_name", "last_name")
        }),
        ("Permissions", {
            "fields": ("is_active", "is_staff", "is_superuser"),
        }),
    )
    
    add_fieldsets = (
        ("Required Information", {
            "classes": ("wide",),
            "fields": ("email", "first_name", "last_name", "password1", "password2"),
        }),
    )

@admin.register(Department)
class DepartmentAdmin(admin.ModelAdmin):
    list_display = ["name", "code", "is_active"]
    search_fields = ["name", "code"]

@admin.register(Role)
class RoleAdmin(admin.ModelAdmin):
    list_display = ["name", "code", "level", "is_active"]
    list_filter = ["level", "is_active"]
    search_fields = ["name", "code"]

@admin.register(UserRole)
class UserRoleAdmin(admin.ModelAdmin):
    list_display = ["user", "role", "is_active"]
    list_filter = ["role", "is_active"]
