
# This will only invoked when xonsh is activate on interactive mode ...
import re
import os
import random
import shutil

def ___x_cmd___rcxonsh_addp(arg_path):
    if arg_path not in __xonsh__.env['PATH']:
        __xonsh__.env['PATH'].insert(0, arg_path)

def ___x_cmd___rcxonsh_addpifh(cmd_name, arg_path):
    if shutil.which(cmd_name):
        ___x_cmd___rcxonsh_addp(arg_path)

def ___x_cmd___rcxonsh_addpifd(arg_path):
    if os.path.isdir(arg_path):
        ___x_cmd___rcxonsh_addp(arg_path)

def ___x_cmd___rxonsh_addpython():
    ___x_cmd___rcxonsh_addpifh("python", "$HOME/.local/bin")

    xcmd_sphere = os.path.expanduser("~/.x-cmd.root/local/data/pkg/sphere/X")
    singleton_file= xcmd_sphere + '/.x-cmd/singleton/python'

    if os.path.exists(singleton_file):
        with open(singleton_file, 'r') as f:
            content = f.read().strip()
        if os.name == 'nt':
            binpath= xcmd_sphere + '/' + content + '/Scripts'
        else:
            binpath= xcmd_sphere + '/' + content + '/bin'

        if binpath in __xonsh__.env['PATH']:
            __xonsh__.env['PATH'].remove(binpath)
        __xonsh__.env['PATH'].insert(0, binpath)


if os.path.isfile(f"{os.environ['HOME']}/.x-cmd.root/ctrl/pixi"):
    __xonsh__.env['PATH'].insert(-1, "$HOME/.pixi/bin")

___x_cmd___rcxonsh_addp("$HOME/.x-cmd.root/bin")
___x_cmd___rcxonsh_addp("$HOME/.x-cmd.root/local/data/pkg/sphere/X/l/j/h/bin")

___x_cmd___rcxonsh_addpifd("$HOME/.cargo/bin")
___x_cmd___rcxonsh_addpifh("go","$HOME/go/bin")
___x_cmd___rcxonsh_addpifh("deno","$HOME/.deno/bin")
___x_cmd___rcxonsh_addpifh("bun","$HOME/.bun/bin")
___x_cmd___rcxonsh_addpifh("npm","$HOME/.npm/bin")
___x_cmd___rxonsh_addpython()


# xonsh defaults all variables exported
$___X_CMD_CD_RELM_0 = $PWD
$___X_CMD_RUNMODE = 0

$___x_cmd_xonsh___bin_suffix = ''
if os.name == 'nt':
    $___x_cmd_xonsh___bin_suffix = '.bat'
___x_cmdexe_exp = f"$HOME/.x-cmd.root/bin/___x_cmdexe_exp$___x_cmd_xonsh___bin_suffix"

def ___x_cmd_xonsh___x_cmd(args):
    $___X_CMD_XBINEXP_FP = $HOME + "/.x-cmd.root/local/data/xbinexp/onsh/"  + str(os.getpid()) + "_" + str(random.randint(0,32767))
    $___X_CMD_XBINEXP_INITENV_OLDPWD = $OLDPWD
    # mkdir -p $___X_CMD_XBINEXP_FP

    $___X_CMD_XBINEXP_EVAL = ""

    # ___x_cmdexe_exp @(args)
    if r := ![ ___x_cmdexe_exp @(args) ] :
        ___exit_code = r.returncode
    else:
        ___exit_code = 1

    if not os.path.isdir( $___X_CMD_XBINEXP_FP ):
        return ___exit_code

    for posixfp in gp`$___X_CMD_XBINEXP_FP/*_*`:
        value = open(posixfp).read()
        name = re.sub(r"^[^_]*_", "", posixfp.name)
        if name == "PWD":
            if os.name == 'nt':
                win_path = re.sub(r'^/([a-zA-Z])/', r'\1:\\', value).replace('/', '\\')
                if win_path:
                    value = win_path
            cd @(value)
        else:
            ${...}[name] = value

    if "onsh" in $___X_CMD_XBINEXP_FP:
        # dangerous
        rm -rf "$___X_CMD_XBINEXP_FP"

    if "___X_CMD_XBINEXP_EVAL" in ${...} and $___X_CMD_XBINEXP_EVAL != "":
        evalx_cmd = $___X_CMD_XBINEXP_EVAL
        del ${...}["___X_CMD_XBINEXP_EVAL"]
        evalx( evalx_cmd )

    return ___exit_code

aliases['___x_cmd'] = ___x_cmd_xonsh___x_cmd

def ___x_cmd_xonsh_c(args):
    oldpwd_dir = $OLDPWD
    original_dir = $PWD
    len_of_args = len(args)
    if len_of_args == 0:
        ___x_cmd cd
        return

    if args[0] == "-":
        cd -
        ___x_cmd cd "--history" "top" @(original_dir)
        args = args[1:]
    elif args[0] == "-b" or args[0] == "-f":
        ___x_cmd cd @(args[0]) @(args[1])
        args = args[2:]
    elif args[0].startswith("-"):
        ___x_cmd cd @(args)
        return
    else:
        ___x_cmd cd @(args[0])
        args = args[1:]

    if len_of_args > 1:
        @(args)
        cd @(original_dir)
        $OLDPWD = oldpwd_dir

def ___x_cmd_xonsh_x(args):
    len_of_args = len(args)
    if len_of_args == 1 and args[0] == "onsh":
        import sys
        @(sys.executable) "-m" "xonsh"
        return

    if len_of_args > 1 and args[0] == "cd":
        ___x_cmd_xonsh_c(args[1:])
        return

    ___x_cmd @(args)

aliases['x'] = ___x_cmd_xonsh_x

def ___x_cmd_xonsh_chat_agent_func( args ):
    $___X_CMD_CHAT_NORMAL_ALIAS = args[0]
    x chat "--send" @(args[1:])

def ___x_cmd_xonsh_writer_agent_func( args ):
    $___X_CMD_DEFAULT_LANGUAGE = args[0]
    x writer @(args[1:])

if __xonsh__.env.get('XONSH_INTERACTIVE'):
    $___X_CMD_REAL_CALLER_SHELL = "xonsh"
    $___X_CMD_RUNMODE = 9

    if not os.path.isfile(f"{os.environ['HOME']}/.x-cmd.root/boot/alias/co.disable"):
        aliases[',']            = [ "___x_cmd", "onsh", "--sysco" ]
        aliases['，']           = [ "___x_cmd", "onsh", "--sysco" ]
    if not os.path.isfile(f"{os.environ['HOME']}/.x-cmd.root/boot/alias/coco.disable"):
        aliases[',,']           = [ "___x_cmd", "onsh", "--syscoco" ]
        aliases['，，']         = [ "___x_cmd", "onsh", "--syscoco" ]

    if os.path.isfile(f"{os.environ['HOME']}/.x-cmd.root/local/cache/shortcut/compile/shortcut.xsh"):
        source "$HOME/.x-cmd.root/local/cache/shortcut/compile/shortcut.xsh"

    if os.path.isfile(f"{os.environ['HOME']}/.x-cmd.root/local/cfg/theme/use/xonsh/default.xsh"):
        source "$HOME/.x-cmd.root/local/cfg/theme/use/xonsh/default.xsh"

    if __xonsh__.env.get('___X_CMD_ADVISE_ACTIVATION_ON_NON_POSIX_SHELL', '1') == '1':
        if os.path.isfile(f"{os.environ['HOME']}/.x-cmd.root/local/cache/advise/bootcode/v0.0.0.xsh"):
            source f"{os.environ['HOME']}/.x-cmd.root/local/cache/advise/bootcode/v0.0.0.xsh"
        if os.path.isfile(f"{os.environ['HOME']}/.x-cmd.root/local/cache/advise/addon/complete.xsh"):
            source f"{os.environ['HOME']}/.x-cmd.root/local/cache/advise/addon/complete.xsh"
