# shellcheck disable=SC2124

___X_CMD_ELV_SETUP_RCCODE='use os; use runtime; use path; if (os:is-regular (path:dir $runtime:rc-path)/lib/x.elv) { use x; x:init; }     # boot up x-cmd in Elvish.'

___X_CMD_ELV_RCPATH=""

___x_cmd_elv_rcpath_(){
    [ -z "$___X_CMD_ELV_RCPATH" ] || {
        x_="$___X_CMD_ELV_RCPATH"
        return 0
    }

    ___x_cmd os name_
    case "$x_" in
        win)    ___X_CMD_ELV_RCPATH="$HOME/AppData/Roaming/elvish" ;;
        *)      ___X_CMD_ELV_RCPATH="$HOME/.config/elvish" ;;
    esac

    x_="$___X_CMD_ELV_RCPATH"
}

___x_cmd_elv___setup(){
    case "$1" in
        --help|-h)      ___x_cmd help -m elv --setup;   return 0;;
    esac

    local mode="${1:-all}"
    case "$mode" in
        all|mod)        ___x_cmd_elv___setup_mod    ;;
    esac

    case "$mode" in
        all|rc)         ___x_cmd_elv___setup_rc     ;;
    esac
}

___x_cmd_elv___setup_is_required(){
    local x_;   ___x_cmd_elv_rcpath_;   local envpath="$x_"

    ! {
        ___x_cmd boot ensurerccodewithoutextra    \
                                    "$___X_CMD_ELV_SETUP_RCCODE"    "$envpath/rc.elv"                       && \
            ___x_cmd_cmds cmp       "$envpath/lib/x.elv"            "$___X_CMD_ROOT_MOD/elv/lib/rc/x.elv"   && \
            ___x_cmd_cmds cmp       "$envpath/lib/a.elv"            "$___X_CMD_ROOT_CACHE/shortcut/compile/shortcut.elv"
    } 1>/dev/null 2>/dev/null
}

___x_cmd_elv___setup_mod(){
    local x_;   ___x_cmd_elv_rcpath_;   local envpath="$x_"

    elv:info "Adding [files=x.elv,a.elv] to [folder=$envpath/lib]"

    ___x_cmd mkdirp     "$envpath/lib"
    ___x_cmd cp -f      "$___X_CMD_ROOT_MOD/elv/lib/rc/x.elv"   "$envpath/lib/x.elv" || return $?
    ___x_cmd shortcut compile elvish || return $?
    ___x_cmd cp -f      "$___X_CMD_ROOT_CACHE/shortcut/compile/shortcut.elv" "$envpath/lib/a.elv"
}

___x_cmd_elv___setup_rc(){
    local x_;   ___x_cmd_elv_rcpath_;   local envpath="$x_"
    ___x_cmd boot initrcfile1  "$___X_CMD_ELV_SETUP_RCCODE"     "$envpath/rc.elv"
}
