import re
from django.core.exceptions import ValidationError

class PasswordValidator:
    def validate(self, password, user=None):
        # Define the password requirements
        min_length = 8
        if len(password) < min_length:
            raise ValidationError(f"Password must be at least {min_length} characters long.")

        # Check for at least one uppercase letter
        if not re.search(r'[A-Z]', password):
            raise ValidationError("Password must contain at least one uppercase letter.")

        # Check for at least one number
        if not re.search(r'\d', password):
            raise ValidationError("Password must contain at least one number.")

        # Check for at least one special character
        if not re.search(r'[!@#$%^&*(),.?":{}|<>]', password):
            raise ValidationError("Password must contain at least one special character.")

    def get_help_text(self):
        return "Your password must be at least 8 characters long and contain at least one uppercase letter, one number, and one special character."
