"""
Auth Admin — Django admin for User + OTPCode.
"""
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin

from .models import User
from .otp_models import OTPCode


@admin.register(User)
class UserAdmin(BaseUserAdmin):
    """Admin configuration for custom User model."""

    list_display = [
        'email',
        'phone',
        'first_name',
        'last_name',
        'display_name',
        'tenant',
        'is_active',
        'is_staff',
        'is_phone_verified',
        'created_at',
    ]
    list_filter = ['is_active', 'is_staff', 'is_superuser', 'gender', 'tenant']
    search_fields = ['email', 'first_name', 'last_name', 'phone', 'display_name']
    ordering = ['-created_at']

    fieldsets = (
        (None, {
            'fields': ('email', 'password')
        }),
        ('Personal Info', {
            'fields': (
                'first_name', 'last_name', 'display_name', 'bio',
                'gender', 'birth_date', 'avatar', 'cover_image',
            )
        }),
        ('Phone', {
            'fields': ('phone', 'phone_country_code', 'phone_verified_at', 'email_verified_at')
        }),
        ('Tenant', {
            'fields': ('tenant',)
        }),
        ('Permissions', {
            'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions'),
            'classes': ('collapse',)
        }),
        ('Metadata', {
            'fields': ('metadata', 'preferences'),
            'classes': ('collapse',)
        }),
        ('Important dates', {
            'fields': ('last_login', 'date_joined'),
            'classes': ('collapse',)
        }),
    )

    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'phone', 'first_name', 'last_name', 'password1', 'password2', 'tenant'),
        }),
    )

    readonly_fields = ['phone_verified_at', 'email_verified_at']


@admin.register(OTPCode)
class OTPCodeAdmin(admin.ModelAdmin):
    list_display = ['phone', 'is_used', 'attempts', 'expires_at', 'created_at']
    list_filter = ['is_used']
    search_fields = ['phone']
    readonly_fields = ['code_hash', 'ip_address', 'created_at']
    ordering = ['-created_at']
