import secrets
import string


def generate_secure_password():
    # Define character sets
    lowercase = string.ascii_lowercase
    uppercase = string.ascii_uppercase
    digits = string.digits
    symbols = "!@#$%^&*()_+-=[]{}|;:,.<>?"

    # Ensure at least one character from each required set
    password = [
        secrets.choice(lowercase),  # one lowercase
        secrets.choice(uppercase),  # one uppercase
        secrets.choice(digits),  # one number
        secrets.choice(symbols),  # one symbol
    ]

    # Generate remaining characters
    all_characters = lowercase + uppercase + digits + symbols
    password.extend(secrets.choice(all_characters) for _ in range(8 - len(password)))

    # Shuffle the password to make it random
    random_password = list(password)
    secrets.SystemRandom().shuffle(random_password)

    return "".join(random_password)
