# shellcheck shell=sh   disable=SC3043,SC1090,SC1091

___x_cmd_ws_locatefp_(){
    local cur="${1:?Provide starting path}"
    x_=; ___x_cmd_abspath_ "$cur" || return $?
    cur="$x_"; x_=""

    local parent=""
    local relative_filepath="${2:?Provide relative filepath}"

    local IFS=' '
    local ext=""
    while [ ! "$cur" = "" ]; do
        # shellcheck disable=SC1009,SC1072,SC1073
        x_="$cur/${relative_filepath}";         [ ! -e "$x_" ] || return 0

        for ext in go zig c cpp js ts py mojo jl hy el lisp pl raku rb java scala groovy kt; do
            x_="$cur/${relative_filepath}.$ext";      [ ! -e "$x_" ] || return 0
        done

        parent="${cur%/*}"
        [ "$parent" != "$cur" ] || return 1
        cur="$parent"
    done
    x_=""
    return 1
}

___x_cmd_ws_exec(){
    local x_
    if [ -z "$1" ]; then
        if ___x_cmd locatefolder_ . ".x-cmd/ws"; then
            ___x_cmd_ws___exe_workspace "$x_/.x-cmd/ws"
            return
        else
            printf "%s\n" "Cannot find .x-cmd/ws" >&2
            return 1
        fi
    fi

    local RESOURCE_NAME="$1"; shift
    if ___x_cmd_ws_locatefp_ . ".x-cmd/$RESOURCE_NAME"; then
        ___x_cmd_ws___exe_workspace "$x_" "$@"
        return
    elif ___x_cmd locatefolder_ . ".x-cmd/ws"; then     # Deprecated
        ___x_cmd_ws___exe_workspace "$x_/.x-cmd/ws" "$RESOURCE_NAME" "$@"
    elif ___x_cmd locatefolder_ . ".x-cmd/X"; then
        ___x_cmd_ws___exe_workspace "$x_/.x-cmd/X" "$RESOURCE_NAME" "$@"
    else
        N=ws M="worksapce command not found -> $RESOURCE_NAME" log:ret:64
    fi
}
