from gevent import monkey

monkey.patch_all(subprocess=False)  # noqa: E402
import click
import os
import pathlib
import sys

from jumpscale.loader import j  # noqa:
from jumpscale.core.config import get_config, get_current_version


BASE_CONFIG_DIR = os.path.join(os.environ.get("HOME", "/root"), ".jsng")
HISTORY_FILENAME = os.path.join(BASE_CONFIG_DIR, "history.txt")


@click.command()
@click.version_option(get_current_version())
@click.argument("command", required=False)
def run(command):
    """Executes the passed command and initiates a jsng shell if no command is passed."""
    os.makedirs(BASE_CONFIG_DIR, exist_ok=True)
    pathlib.Path(HISTORY_FILENAME).touch()
    if command is None:
        config = get_config()
        if config["shell"] == "ipython":
            from IPython import embed

            sys.exit(embed(colors="neutral"))
        else:
            from jumpscale.shell import ptconfig
            from ptpython.repl import embed

            sys.exit(embed(globals(), locals(), configure=ptconfig, history_filename=HISTORY_FILENAME))
    else:
        sys.exit(print(exec(command)))
