from core_utilities.cloudwatch_service import CloudWatchService
import traceback, os
from dotenv import load_dotenv

load_dotenv()

def get_cloudwatch_logger(stream_name: str = None):
    """
    Initializes and returns a CloudWatchService logger instance.
    """
    log_group = os.environ.get('CLOUDWATCH_GROUP')
    log_stream = stream_name or os.environ.get('CLOUDWATCH_STREAM')
    aws_access_key = os.environ.get('CLOUDWATCH_ACCESS_KEY')
    aws_secret_key = os.environ.get('CLOUDWATCH_SECRET_KEY')
    
    return CloudWatchService(
        log_group_name=log_group, 
        log_stream_name=log_stream,
        aws_access_key_id=aws_access_key,
        aws_secret_access_key=aws_secret_key
    )

def log_exception(logger, message="Exception occurred"):
    """
    Logs an exception with a full stack trace to CloudWatch.
    """
    error_stack_trace = traceback.format_exc()
    log_message = f"EXCEPTION: {message}\n{error_stack_trace}"
    if logger:
        logger.send_log_event(log_message)
