"""
Django Admin Configuration for Authentication Models
This allows you to manage users through Django's admin panel.
"""

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from .models import User, EmailVerificationOTP, PasswordResetToken


@admin.register(User)
class UserAdmin(BaseUserAdmin):
    """
    Custom User Admin to display in Django Admin panel.
    """

    list_display = ['email', 'first_name', 'last_name', 'is_email_verified', 'is_google_user', 'is_apple_user', 'is_staff', 'date_joined']
    list_filter = ['is_email_verified', 'is_google_user', 'is_apple_user', 'is_staff', 'is_active', 'date_joined']
    search_fields = ['email', 'first_name', 'last_name', 'phone_number']
    ordering = ['-date_joined']

    fieldsets = (
        ('Personal Info', {
            'fields': ('email', 'first_name', 'last_name', 'phone_number', 'profile_picture', 'bio')
        }),
        ('Authentication', {
            'fields': ('password', 'is_email_verified', 'is_google_user', 'google_id', 'is_apple_user', 'apple_id')
        }),
        ('Permissions', {
            'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')
        }),
        ('Important Dates', {
            'fields': ('last_login', 'date_joined')
        }),
    )

    add_fieldsets = (
        ('Create New User', {
            'classes': ('wide',),
            'fields': ('email', 'first_name', 'password1', 'password2', 'is_email_verified'),
        }),
    )

    readonly_fields = ['date_joined', 'last_login']


@admin.register(EmailVerificationOTP)
class EmailVerificationOTPAdmin(admin.ModelAdmin):
    """
    Admin configuration for Email Verification OTPs.
    """

    list_display = ['email', 'otp', 'is_verified', 'created_at']
    list_filter = ['is_verified', 'created_at']
    search_fields = ['email']
    ordering = ['-created_at']
    readonly_fields = ['created_at']


@admin.register(PasswordResetToken)
class PasswordResetTokenAdmin(admin.ModelAdmin):
    """
    Admin configuration for Password Reset Tokens.
    """

    list_display = ['user', 'temp_password', 'is_used', 'created_at']
    list_filter = ['is_used', 'created_at']
    search_fields = ['user__email']
    ordering = ['-created_at']
    readonly_fields = ['created_at']
