# -*- coding: utf-8 -*-
from django.contrib import admin
from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin

from apps.accounts.utils import get_avatar_html
from apps.accounts.models import User, Profile, Role, UserRole 


class ProfileInline(admin.StackedInline):
    model = Profile
    can_delete = False
    fk_name = "user"
    fields = ("bio", "avatar", "job_title", "timezone", "language")


class UserRoleInline(admin.TabularInline):
    model = UserRole
    fk_name = "user"
    extra = 0
    fields = ("role", "assigned_by", "assigned_at", "is_active")
    readonly_fields = ("assigned_at",)


@admin.register(User)
class UserAdmin(BaseUserAdmin):
    inlines = (ProfileInline, UserRoleInline)
    list_display = ("email", "username", "first_name", "last_name", "is_verified", "is_active", "is_staff", "is_superuser")
    list_filter = ("is_active", "is_staff", "is_superuser", "is_verified", "date_joined")
    search_fields = ("email", "username", "first_name", "last_name")
    ordering = ("-date_joined",)
    readonly_fields = ("date_joined", "last_login", "last_activity", "email_verified_at", "password_changed_at")
    
    fieldsets = (
        (None, {"fields": ("email", "username", "password")}),
        (_("Personal info"), {"fields": ("first_name", "last_name", "phone_number" )}),
        (_("Permissions"), {"fields": ("is_active", "is_staff", "is_superuser", "groups", "user_permissions")}),
        (_("Important dates"), {"fields": ("last_login", "date_joined", "last_activity")}),
        (_("Security"), {"fields": ("is_verified", "email_verified_at", "failed_login_attempts", "account_locked_until", "mfa_enabled")}),
    )


@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
    list_display = ("user","get_avatar_display", "job_title", "timezone", "language")
    list_filter = ("timezone", "language")
    search_fields = ("user__email", "user__username","job_title")
    readonly_fields = ("created_at", "updated_at")
    
    def get_avatar_display(self, obj):
        """Display avatar thumbnail in admin."""
        return get_avatar_html(obj, size=40)
    get_avatar_display.short_description = "Avatar"
 

@admin.register(Role)
class RoleAdmin(admin.ModelAdmin):
    list_display = ("name", "code", "role_type", "level", "is_active", "is_default")
    list_filter = ("is_active", "is_default", "role_type", "level")
    search_fields = ("name", "code", "description")
    readonly_fields = ("created_at", "updated_at")


@admin.register(UserRole)
class UserRoleAdmin(admin.ModelAdmin):
    list_display = ("user", "role", "assigned_by", "assigned_at", "is_active")
    list_filter = ("is_active", "assigned_at", "role")
    search_fields = ("user__email", "role__name")
    readonly_fields = ("assigned_at",)

