import resource
import os
from datetime import datetime
from utils.logger import logger

def log_memory_usage(stage: str, user_info: str = ""):
    """
    Log memory usage to both CSV file and application logger.
    
    Args:
        stage (str): Current stage of execution (e.g., "script_start", "form_submitted")
        user_info (str, optional): Additional user information for context
    """
    try:
        # Get memory usage in bytes
        memory = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
        memory_mb = memory / 1024  # Convert to MB

        # Get log file path using project's file creation utility
        from utils.make_memory_log_file import make_memory_log_file
        csv_file_path = make_memory_log_file()
                
        # Append memory usage data
        with open(csv_file_path, 'a', encoding='utf-8') as f:
            current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            f.write(f'{current_time},{stage},{memory_mb:.2f},{user_info}\n')
            
        # Also log to main application log
        logger.info(f'Memory Usage at {stage}: {memory_mb:.2f}MB {user_info}')
        
    except Exception as e:
        logger.error(f'Memory logging failed: {str(e)}')
