from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from .models import User, AppSetting
from .forms import UserCreationForm, UserChangeForm


@admin.register(User)
class UserAdmin(BaseUserAdmin):
    model = User
    form = UserChangeForm
    add_form = UserCreationForm

    list_display = ("email", "first_name", "last_name", "role", "is_verified", "is_active", "is_staff", "date_joined")
    list_filter = ("role", "is_verified", "is_active", "is_staff")
    search_fields = ("email", "first_name", "last_name")
    ordering = ("-date_joined",)
    readonly_fields = ("date_joined", "last_login")

    # Formulaire d'édition (changer un utilisateur existant)
    fieldsets = (
        (None, {"fields": ("email", "password")}),
        ("Identité", {"fields": ("first_name", "last_name", "phone")}),
        ("Rôle & accès", {"fields": ("role", "is_verified", "is_active", "is_staff", "is_superuser")}),
        ("Invitation (OTP)", {"fields": ("otp_code", "otp_created_at"), "classes": ("collapse",)}),
        ("Dates", {"fields": ("date_joined", "last_login"), "classes": ("collapse",)}),
    )

    # Formulaire d'ajout (créer un nouvel utilisateur) — doit inclure password1 et password2
    add_fieldsets = (
        (None, {
            "classes": ("wide",),
            "fields": ("email", "first_name", "last_name", "phone", "role", "password1", "password2"),
        }),
    )


@admin.register(AppSetting)
class AppSettingAdmin(admin.ModelAdmin):
    list_display = ("key", "value")
    search_fields = ("key",)
    ordering = ("key",)
