from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

class PerfilUsuario(models.Model):
    ROLES = [
        ('AUXILIAR', 'AUXILIAR'),
        ('CONTADOR', 'CONTADOR'),
        ('ADMINISTRADOR', 'ADMINISTRADOR'),
    ]
    
    usuario = models.OneToOneField(User, on_delete=models.CASCADE, related_name='perfil')
    rol = models.CharField(max_length=20, choices=ROLES, default='AUXILIAR')
    aprobado = models.BooleanField(default=False)

    def __str__(self):
        return f"{self.usuario.username} - {self.rol}"

# Señales para crear el perfil automáticamente cuando se crea un usuario
@receiver(post_save, sender=User)
def crear_perfil_usuario(sender, instance, created, **kwargs):
    if created:
        # Si es el primer usuario en la base de datos o es superuser, se aprueba solo
        es_primero = User.objects.count() == 1
        es_admin = instance.is_superuser or es_primero
        
        PerfilUsuario.objects.create(
            usuario=instance,
            rol='ADMINISTRADOR' if es_admin else 'AUXILIAR',
            aprobado=True if es_admin else False
        )
        
        if es_primero and not instance.is_superuser:
            instance.is_superuser = True
            instance.is_staff = True
            instance.save()

@receiver(post_save, sender=User)
def guardar_perfil_usuario(sender, instance, **kwargs):
    if hasattr(instance, 'perfil'):
        instance.perfil.save()

class SolicitudPassword(models.Model):
    usuario = models.ForeignKey(User, on_delete=models.CASCADE)
    fecha_solicitud = models.DateTimeField(auto_now_add=True)
    atendida = models.BooleanField(default=False)

    class Meta:
        ordering = ['-fecha_solicitud']
        verbose_name = "Solicitud de Restablecimiento"
        verbose_name_plural = "Solicitudes de Restablecimiento"
