# this script is used on windows to wrap shortcuts so that they are executed within an environment
#   It only sets the appropriate prefix PATH entries - it does not actually activate environments

import argparse
import os
import subprocess
import sys
from os.path import join, pathsep

# this must be an absolute import since the cwp.py script is copied to $PREFIX
from menuinst.knownfolders import FOLDERID, get_folder_path


def main():
    # call as: python cwp.py [--no-console] PREFIX ARGs...
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--no-console", action="store_true", help="Create subprocess with CREATE_NO_WINDOW flag."
    )
    parser.add_argument("prefix", help="Prefix to be 'activated' before calling `args`.")
    parser.add_argument("args", nargs="*", help="Command (and arguments) to be executed.")
    parsed_args = parser.parse_args()

    no_console = parsed_args.no_console
    prefix = parsed_args.prefix
    args = parsed_args.args

    new_paths = pathsep.join(
        [
            prefix,
            join(prefix, "Library", "mingw-w64", "bin"),
            join(prefix, "Library", "usr", "bin"),
            join(prefix, "Library", "bin"),
            join(prefix, "Scripts"),
        ]
    )
    env = os.environ.copy()
    env["PATH"] = new_paths + pathsep + env["PATH"]
    env["CONDA_PREFIX"] = prefix

    documents_folder, exception = get_folder_path(FOLDERID.Documents)
    if exception:
        documents_folder, exception = get_folder_path(FOLDERID.PublicDocuments)
    if not exception:
        os.chdir(documents_folder)

    creationflags = {}
    if no_console:
        creationflags["creationflags"] = getattr(subprocess, "CREATE_NO_WINDOW", 0x08000000)
    sys.exit(subprocess.call(args, env=env, **creationflags))


if __name__ == "__main__":
    main()
