#PortalREMax/accounts/admin.py
from django.contrib import admin
from .models import *
from .signals import save_cliente, update_cliente, save_usuario, update_usuario
from django.dispatch import Signal
from django.db import transaction




save_usuario = Signal()
save_cliente = Signal()

update_usuario = Signal()
update_cliente = Signal()

from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.utils.translation import gettext_lazy as _


@admin.register(Usuario)
class UserAdmin(BaseUserAdmin):
    fieldsets = (
        (None, {"fields": ("email", "password")}),
        (_("Personal info"), {"fields": ("first_name", "last_name", "bio", "data_nascimento", "telefone", "foto")}),
        (_("Permissions"), {"fields": ("is_active", "is_staff", "is_superuser", "groups", "user_permissions")}),
        (_("Important dates"), {"fields": ("last_login", "date_joined")}),
    )
    
    list_display = ("email", "first_name", "last_name", "is_active", "is_staff", "is_superuser")
    search_fields = ("email", "first_name", "last_name")
    ordering = ("email",)

    def save_model(self, request, obj, form, change):
        """
        Only hash the password if it's being changed (i.e., it's in plaintext).
        """
        if "password" in form.cleaned_data:
            raw_password = form.cleaned_data["password"]
            if raw_password and not raw_password.startswith("pbkdf2_sha256$"):
                obj.set_password(raw_password)  # Hash the password only if it's new/changed

        try:
            with transaction.atomic():
                super().save_model(request, obj, form, change)
                if change:
                    update_usuario.send(sender=obj.__class__, instance=obj)
                else:
                    save_usuario.send(sender=obj.__class__, instance=obj)
        except Exception as e:
            self.message_user(request, f"Error: {e}", level="error")


@admin.register(ClienteToken)  # ✅ Register ClienteToken
class ClienteTokenAdmin(admin.ModelAdmin):
    list_display = ["cliente", "key", "created_at"]
    search_fields = ["cliente__email", "key"]
@admin.register(Cliente)
class ClienteAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        if 'password' in form.cleaned_data and not obj.check_password(form.cleaned_data['password']):
            obj.set_password(form.cleaned_data['password']) # Hash the password
        try:
            with transaction.atomic():
                print("Here")
                super().save_model(request, obj, form, change)
                if change:
                    print("Here2")
                    try:
                        update_cliente.send(sender=obj.__class__, instance=obj)
                    except Exception as e:
                        self.message_user(request, f"Error: {e}", level='error')
                else:
                    save_cliente.send(sender=obj.__class__, instance=obj)
        except Exception as e:
            self.message_user(request, f"Error: {e}", level='error')





