#!python 
from json import loads
from json.decoder import JSONDecodeError
from sys import argv, exit as sys_exit
from os import getcwd, system
from os.path import exists
from colorama import init
from colorama import Fore, Back, Style

init()
cmd_args = argv
del cmd_args[0]

if len(cmd_args) == 0:
    print(Fore.RED + "No scripts specified in command." + Style.RESET_ALL)
    sys_exit(1)

if cmd_args[-1][:2] == "[]":
    additional_args = cmd_args[-1][2:]
    del cmd_args[-1]
else:
    additional_args = ""

if not exists("./scripts.json"):
    print(Fore.RED + "`scripts.json` not found in " + getcwd() + Style.RESET_ALL)
    sys_exit(1)

try:
    run_conf = loads(open("scripts.json", "r").read())
except Exception as err:
    print(Fore.RED + "Invalid JSON in `scripts.json`: " + Style.RESET_ALL)
    sys_exit(1)

cmd = cmd_args[0]
if cmd not in run_conf:
    print(Fore.RED + f"Script `{cmd}` not defined" + Style.RESET_ALL)
    sys_exit(1)

try:
    script = run_conf[cmd]
    if isinstance(script, dict):
        for i in cmd_args[1:]:
            script = script[i]
        if isinstance(script, str):
            system(script + " " + additional_args)
        elif isinstance(script, list):
            for i in script:
                system(i + " " + additional_args)
        sys_exit(0)

    elif isinstance(script, list):
        for i in script:
            system(i + " " + additional_args)
        sys_exit(0)

    system(script + " " + additional_args)

except KeyError:
    print(Fore.RED + "Script not defined." + Style.RESET_ALL)
    sys_exit(1)
except TypeError as type_error:
    try:
        print(Fore.RED + f"No one script specified, options are {list(script.keys())}." + Style.RESET_ALL)
        sys_exit(1)
    except AttributeError as err:
        print(Fore.RED + f"Script not defined." + Style.RESET_ALL)
        sys_exit(1)