import logging
import os
from typing import Optional

def setup_logger(name: Optional[str] = None, log_level: str = 'INFO') -> logging.Logger:
    """
    Set up a logger with the desired configuration.
    
    Args:
        name: Name of the logger (defaults to root logger)
        log_level: Logging level as string (DEBUG, INFO, WARNING, ERROR, CRITICAL)
        
    Returns:
        Configured logger
    """
    # Get the logger (root logger if name is None)
    logger = logging.getLogger(name)
    
    # Set level based on environment or default
    env_level = os.environ.get('LOG_LEVEL', log_level)
    numeric_level = getattr(logging, env_level.upper(), logging.INFO)
    logger.setLevel(numeric_level)
    
    # Create formatter if it doesn't exist
    if not logger.handlers:
        handler = logging.StreamHandler()
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        handler.setFormatter(formatter)
        logger.addHandler(handler)
        
    return logger

def reduce_logging_verbosity():
    """
    Reduce verbosity of AWS and other libraries to avoid log spam
    """
    # Set higher log levels for noisy libraries
    for logger_name in ['boto3', 'botocore', 'urllib3', 'supabase', 's3transfer']:
        logging.getLogger(logger_name).setLevel(logging.WARNING) 