import os

from actions_logging.app_logging import logger
from aws.constants import STG_PROD_ENVS
from common.common import run_command
from github.env import exit_on_error_and_write_summary, get_required_env_var


def download_and_unpack(svc_name, version_to_deploy, scope):
    try:
        logger.info(f"downloading npm package for {svc_name} with version {version_to_deploy} and scope {scope}")
        package_name = run_command("npm pkg get name").strip().strip('"')
        version_to_deploy = version_to_deploy.lstrip("v")
        version_prefix = ""
        version_split = version_to_deploy.split("-")
        if len(version_split) == 3 and version_split[0] in STG_PROD_ENVS:
            version_prefix = "0.0.0-"
        npm_package_version = f"{version_prefix}{version_to_deploy}"
        package_name_no_scope = package_name.split("/")[1]
        tgz_file = f"{svc_name}-{package_name_no_scope}-{npm_package_version}.tgz"

        if scope:  # webclient case
            package_name_prefix = f"{scope}-{svc_name}"
            package_name = f"@{package_name_prefix}/{package_name_no_scope}"
            logger.debug(f"package name update to {package_name}")
            tgz_file = f"{package_name_prefix}-{package_name_no_scope}-{npm_package_version}.tgz"

        run_command(f"npm pack {package_name}@{npm_package_version}")

        if int(os.path.getsize(tgz_file)) == 0:
            RuntimeError(f"downloaded npm package {tgz_file} is empty.")

        logger.info(f"package downloaded into {tgz_file}, unpacking...")

        run_command(f"tar zxvf {tgz_file}")
        run_command("cp -rf package/build .")
        logger.info("successfully downloaded and unpacked the package to deploy.")
    except Exception as e:
        exit_on_error_and_write_summary(
            f"Failed to download & extract npm package for {svc_name} version {version_to_deploy}, scope {scope}: {e}"
        )


if __name__ == "__main__":
    svc_name = get_required_env_var("SVC_NAME")
    version_to_deploy = get_required_env_var("VERSION_TO_DEPLOY")
    scope = ""
    if not scope and svc_name in ["webclient", "workspace", "jarvis_client", "cd-poc-fe", "jarvis_client_mr"]:
        scope = os.getenv("SCOPE", "p81")
    download_and_unpack(svc_name, version_to_deploy, scope)