# app_login/validators.py (AJUSTADO)

import re
from django.core.exceptions import ValidationError
from django.utils.translation import gettext as _

class CustomPasswordValidator:
    """
    Valida a complexidade da senha:
    - Pelo menos 1 letra maiúscula
    - Pelo menos 1 letra minúscula
    - Pelo menos 1 número
    - Pelo menos 1 caractere especial
    O comprimento (8-12) é validado por outros validadores no settings.py
    """

    def validate(self, password, user=None):
        # REMOVIDA a verificação de comprimento máximo daqui, 
        # pois o MinimumLengthValidator já cuida do mínimo de 8. 
        # Se quiser um MÁXIMO de 12, podemos adicionar um MaxLengthValidator no settings.py
        # if len(password) > 12:
        #     raise ValidationError(_("A senha deve ter no máximo 12 caracteres."))

        if not re.search(r"[A-Z]", password):
            raise ValidationError(_("A senha deve conter pelo menos 1 letra maiúscula."))

        if not re.search(r"[a-z]", password):
            raise ValidationError(_("A senha deve conter pelo menos 1 letra minúscula."))

        if not re.search(r"[0-9]", password):
            raise ValidationError(_("A senha deve conter pelo menos 1 número."))

        # Regex atualizado para incluir _ - + =
        if not re.search(r"[!@#$%^&*(),.?\":{}|<>_\-+=]", password): 
            raise ValidationError(_("A senha deve conter pelo menos 1 caractere especial."))

    def get_help_text(self):
        # Texto de ajuda atualizado para refletir a validação combinada
        return _(
            "Sua senha deve ter de 8 a 12 caracteres*, conter letras maiúsculas, minúsculas, números e caracteres especiais."
        )