import os

from actions_logging.app_logging import logger
from aws.constants import PROD_ACCOUNT_ENVS
from aws.env_info import get_fe_expected_static_bucket
from aws.s3_apis.s3 import create_s3_client, s3bucket_exists
from github.env import bool_to_gh_str, exit_on_error_and_write_summary, get_required_env_var, write_github_env


def main():
    env_name = get_required_env_var("ENV_NAME")
    svc_name = get_required_env_var("SVC_NAME")
    static_contents_bucket = os.getenv("STATIC_CONTENT_BUCKET_NAME", "")
    us_standalone_infra_exists = False
    expected_static_contents_bucket = get_fe_expected_static_bucket(svc_name, env_name, "us", "checkpoint")
    if not static_contents_bucket:
        logger.error(
            f"Environment variable STATIC_CONTENT_BUCKET_NAME is not set or empty for environment {env_name},"
            " skipping deployment of checkpoint standalone."
        )
    elif static_contents_bucket != expected_static_contents_bucket:
        logger.error(
            f"Environment variable STATIC_CONTENT_BUCKET_NAME is set to {static_contents_bucket}, "
            f"but expected {expected_static_contents_bucket}. Check if "
            f"`US_STANDALONE_OVERRIDE_STATIC_CONTENT_BUCKET_NAME` is set in {env_name}.json "
            "along with other related overrides."
        )
    else:
        try:
            env_name_to_assume = env_name if env_name not in PROD_ACCOUNT_ENVS else ""
            s3_client = create_s3_client(env_name_to_assume)
            if s3bucket_exists(s3_client, static_contents_bucket):
                us_standalone_infra_exists = True
            else:
                logger.error(f"{static_contents_bucket} doesn't exist")
        except Exception as e:
            exit_on_error_and_write_summary(e)

    write_github_env(bool_to_gh_str(us_standalone_infra_exists), "US_STANDALONE_INFRA_EXISTS")


if __name__ == "__main__":
    main()
