"""
A class to check if a password is strong.
There are 5 rules to check if a password is strong:
1. Must contain at least 8 characters.
2. Must contain at least one uppercase letter.
3. Must contain at least one lowercase letter.
4. Must contain at least one number.
5. Must contain at least one special character (from `!@#$%^&*()`).
"""

SPECIAL_CHARS = "!@#$%^&*()"


def check_len(password: str) -> bool:
    """_summary_

    Args:
        password (str): The password to test is 

    Returns:
        bool: _description_
    """
    pass


def check_uppercase(password: str) -> bool:
    """
    Check if the password has at least one uppercase letter.
    :param password: str, the password
    :return: bool, True if the password has at least one uppercase letter, False otherwise
    """
    pass


def check_lowercase(password: str) -> bool:
    """
    Check if the password has at least one lowercase letter.
    :param password: str, the password
    :return: bool, True if the password has at least one lowercase letter, False otherwise
    """
    pass


def check_number(password: str) -> bool:
    """
    Check if the password has at least one number.
    :param password: str, the password
    :return: bool, True if the password has at least one number, False otherwise
    """
    pass


def check_special_char(password: str) -> bool:
    """
    Check if the password has at least one special character.
    :param password: str, the password
    :return: bool, True if the password has at least one special character, False otherwise
    """
    pass


def is_strong(password: str) -> bool:
    """
    Check if the password is strong.
    To be strong, the password must satisfy the 5 rules.
    :param password: str, the password
    :return: bool, True if the password is strong, False otherwise
    """
    pass


if __name__ == '__main__':
    password = "StrongPassword123!"
    print(is_strong(password))