
from github.env import exit_on_error_and_write_summary
from actions_logging.app_logging import logger
import argparse
import os

def split_version(version):
    # Version comes in form of "1.2.3.4" and we would like to break it into major, minor, patch and build as seperate values
    return version.split(".")




def generate_nexus_upload_path(version,  build_os, build_arch, av, branch, gha_run_number, release=False, manifest=False):
    # Generate the Nexus upload link based on the OS
    major, minor, patch, build = split_version(version)  
    if not release:
        url = f"firefly/{branch if branch == 'refs/heads/main' else 'v'+major+'.'+minor}/nightly/130{gha_run_number}"
        if not manifest:
            return f"{url}/{'AV' if av else 'NO_AV'}/{build_os}/{build_arch}/{build_os}_{build_arch}.zip"
        else:
            return f"{url}/manifest.json"
    else:
        url = f"firefly/v{major}.{minor}/stable/{patch}/{build}"
        if not manifest:
            return f"{url}/{'AV' if av else 'NO_AV'}/{build_os}/{build_arch}/{build_os}_{build_arch}.zip"
        else:
            return f"{url}/manifest.json"

if __name__ == "__main__":
    # Parse command-line arguments
    parser = argparse.ArgumentParser(description="Get input parameters")
    parser.add_argument('--build_os', type=str, nargs='?', help='For which OS to create build for')
    parser.add_argument('--av', type=str, nargs='?', help='If to use alternate command during build')
    parser.add_argument('--version', type=str, nargs='?', help='Build version')
    parser.add_argument('--build_arch', type=str, nargs='?', help='OS build architecture')
    parser.add_argument('--branch', type=str, nargs='?', help='From which branch is the build accuring')
    parser.add_argument('--gha_run_number', type=str, nargs='?', help='The run number GH has assigned to the build')
    parser.add_argument('--release', type=str, nargs='?', help='Is this a release build')
    parser.add_argument('--manifest', type=str, nargs='?', help='Is this a manifest file')



    args = parser.parse_args()
    if args.av == "true" or args.av == "True":
        av = True
    else:
        av = False
    if args.release == "true" or args.release == "True" or args.release == "release":
        logger.info("Preparing for a release build")
        release = True
    else:
        logger.info("Preparing for a nightly build")
        release = False
    if args.manifest == "true" or args.manifest == "True":
        manifest = True
        logger.info("Preparing for manifest file")
    else:
        manifest = False
    upload_path = generate_nexus_upload_path(args.version, args.build_os, args.build_arch, av, args.branch, args.gha_run_number, release, manifest)
    logger.info(f"Nexus upload path: {upload_path}")
    if av:
        env_var_addtion = 'AV'
    elif manifest:
        env_var_addtion = "MANIFEST"
    else:
        env_var_addtion = 'NO_AV'
    gha_env_file = os.getenv('GITHUB_ENV')

    with open(gha_env_file, "a") as gha_env:
        gha_env.write(f"NEXUS_UPLOAD_{env_var_addtion}_PATH={upload_path}\n")