# Copyright 2021 Memgraph Ltd.
#
# Use of this software is governed by the Business Source License
# included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
# License, and you may not use this file except in compliance with the Business Source License.
#
# As of the Change Date specified in that file, in accordance with
# the Business Source License, use of this software will be governed
# by the Apache License, Version 2.0, included in the file
# licenses/APL.txt.

import os
from argparse import ArgumentParser

try:
    import jail
    APOLLO = True
except:
    import jail_faker as jail
    APOLLO = False


WALL_TIME = "wall_time"
CPU_TIME = "cpu_time"
MAX_MEMORY = "max_memory"

DIR_PATH = os.path.dirname(os.path.realpath(__file__))


def get_absolute_path(path, base=""):
    if base == "build":
        extra = "../../build"
    elif base == "libs":
        extra = "../../libs"
    elif base == "config":
        extra = "../../config"
    else:
        extra = ""
    return os.path.normpath(os.path.join(DIR_PATH, extra, path))


# Assign process to cpus passed by flag_name flag from args. If process is
# running on Apollo that flag is obligatory, otherwise is ignored. flag_name
# should not contain leading dashed.
def set_cpus(flag_name, process, args):
    argp = ArgumentParser()
    # named, optional arguments
    argp.add_argument("--" + flag_name, nargs="+", type=int, help="cpus that "
                      "will be used by process. Obligatory on Apollo, ignored "
                      "otherwise.")
    args, _ = argp.parse_known_args(args)
    attr_flag_name = flag_name.replace("-", "_")
    cpus = getattr(args, attr_flag_name)
    assert not APOLLO or cpus, \
            "flag --{} is obligatory on Apollo".format(flag_name)
    if cpus:
        process.set_cpus(cpus, hyper = False)