import boto3
from actions_logging.app_logging import logger
from typing import Optional


def get_lambda(lambda_name, region) -> Optional[dict]:
    session = boto3.Session(region_name=region)
    client = session.client('lambda')
    try:
        response = client.get_function(FunctionName=lambda_name)
        return response
    except client.exceptions.ResourceNotFoundException as e:
        logger.error(f"Lambda: {lambda_name} not found in region: {region}. Error: {e}")
        return None
    except Exception as e:
        logger.error(f"Failed to get lambda: {lambda_name}. Error: {e}")
        raise e


def get_lambda_tags(lambda_name: str, region: str) -> dict:
    try:
        logger.info(f"Getting tags for lambda: {lambda_name}")
        response = get_lambda(lambda_name, region)
        if not response:
            logger.error(f"Failed to get lambda in get lambda_tags: {lambda_name} with empty response")
            return {}
        if response.get('Tags'):
            tags = response.get('Tags')
            logger.debug(f"Tags for lambda: {lambda_name} are: {tags}")
            return tags
        logger.error(f"aws lambda response for {lambda_name} doesn't contain 'Tags' key. Response: {response}")
        return {}
    except Exception as e:
        logger.error(f"Failed to get tags for lambda: {lambda_name}. Error: {e}")
        raise e
