import os

def print_config(settings_obj):
    """
    Prints the application's configuration to the console, masking sensitive values.
    """
    print("--- ⚙️  Application Configuration ---")
    
    sensitive_keywords = ["KEY", "TOKEN", "SECRET", "PASSWORD"]
    
    # Use sorted(dir(...)) to ensure a consistent output order for tests
    for key in sorted(dir(settings_obj)):
        # Skip private/dunder methods
        if key.startswith('_'):
            continue

        value = getattr(settings_obj, key)

        # **CRITICAL FIX**: Skip attributes that are methods/functions
        if callable(value):
            continue
            
        if any(k in key for k in sensitive_keywords):
            if not value:
                masked_value = "Not Set"
            elif isinstance(value, str) and len(value) > 8:
                masked_value = f"{value[:4]}...{value[-4:]}"
            else:
                masked_value = "***"
            print(f"  - {key}: {masked_value}")
        else:
            print(f"  - {key}: {value}")
    
    print("------------------------------------")