import os
from github.env import write_github_summary, get_required_env_var
from actions_logging.app_logging import logger
from aws.env_info import get_env_bucket
from aws.s3_apis.s3 import upload_file_to_s3
from core.constants import version_file_suffix


def create_version_file_name_by_svc(svc_name: str) -> str:
    version_file_name = f"{svc_name}_{version_file_suffix}"
    logger.debug(f"version_file_name: {version_file_name}")
    return version_file_name


def create_version_file(version_file_name: str, version_to_deploy: str):
    try:
        logger.debug(f"Creating version file: {version_file_name} with version: {version_to_deploy}")
        with open(version_file_name, 'w') as f:
            f.write(version_to_deploy)
    except Exception as e:
        raise RuntimeError(f"failed to create version file, error: {e}")


def main():
    """
    depends on the env vars: VERSION_TO_DEPLOY, ENV_NAME, SVC_NAME
    this script will create a file named: {SVC_NAME}_{version_file_suffix} with the content of VERSION_TO_DEPLOY
    and push it to the env-files bucket of the env to the {SVC_NAME} folder.
    """
    try:
        logger.info("Publishing version to s3")
        version_to_deploy = get_required_env_var('VERSION_TO_DEPLOY')
        env_name = get_required_env_var('ENV_NAME')
        svc_name = get_required_env_var('SVC_NAME')
        logger.debug(f"version_to_deploy: {version_to_deploy}, env_name: {env_name}, svc_name: {svc_name}")
        bucket_name = get_env_bucket(env_name)
        logger.debug(f"bucket_name: {bucket_name}")
        version_file_name = create_version_file_name_by_svc(svc_name)
        create_version_file(version_file_name, version_to_deploy)
        s3_file_path = os.path.join(svc_name, version_file_name)
        upload_file_to_s3(bucket_name, version_file_name, s3_file_path)
        logger.info(f"Published version {version_to_deploy} in {s3_file_path} file to {bucket_name} s3")
    except Exception as e:
        error_message = f"failed to publish version to s3, error: {e}"
        logger.error(error_message)
        write_github_summary(f":stop_sign: {error_message}")


if __name__ == '__main__':
    main()
