from actions_logging.app_logging import logger
from aws.s3_apis.s3 import upload_file_to_s3
from github.env import exit_on_error_and_write_summary, get_required_env_var, write_github_env
from aws.constants import ENVS as AWS_ENVS
from aws.env_info import get_env_bucket
import os

def main():
    try:
        file_path = os.getenv('LAMBDA_FILE_PATH') or None
        logger.info_green_bg(f'Starting with path . {file_path}')
        is_downloaded_from_nexus = get_required_env_var('BUILD_ARTIFACT') == 'false'
        logger.info_green_bg('Starting upload lambda to s3 step.')
        build_number = get_required_env_var('BUILD_NUMBER')
        file_name = os.getenv("ZIP_FILE") if os.getenv('RUNTIME')=='Java' else get_required_env_var('SVC_NAME') + f'_{build_number}.zip'
        env_name = get_required_env_var('ENV_NAME')
        if env_name not in AWS_ENVS:
            raise RuntimeError(f'No S3 bucket is found for {env_name}')
        s3_bucket = get_env_bucket(env_name)
        if is_downloaded_from_nexus:
            file_name = get_required_env_var('SVC_NAME') + '.zip'
        logger.info(f'Uploading the lambda {file_name} to s3://{s3_bucket}.')
        upload_file_to_s3(bucket_name=s3_bucket, file_name=file_name, file_path=file_path) 
        write_github_env(file_name, 'LAMBDA_ZIP_TO_UPLOAD')
        write_github_env(s3_bucket, 'S3_BUCKET_FOR_LAMBDA_UPLOAD')
    except Exception as e:
        exit_on_error_and_write_summary(f'Error in {__file__}. Reason: {e}')


if __name__ == "__main__":
    main()
