# shellcheck shell=sh disable=SC3043

___x_cmd_wx_run(){
    local wxfile="${1:-.}"; [ "$#" -eq 0 ] || shift

    case "$wxfile" in
        @me/*|@i/*|@/*|@*/*) wxfile="$(x hub file which "$wxfile")" || return 1 ;;
    esac

    local ___X_CMD_WX_UNPKG_
    if [ -d "$wxfile" ]; then
        ___X_CMD_WX_UNPKG_="$wxfile"
    else
        ___x_cmd_wx_unpkg_ "$wxfile" || return
    fi

    local ___X_CMD_WX_RUN_OLD_PWD="$PWD"

    if ! ___x_cmd_inner_cd "$___X_CMD_WX_UNPKG_"; then
        x:error "Cannot access folder: $___X_CMD_WX_UNPKG_"
        return 1
    fi

    # TODO: To use no shift at ws module.
    x ws execfile run "$@"

    # if [ -f ".x-cmd/run-dist" ]; then
    #     x ws run-dist "$@"
    # else
    #     if [ -f ".x-cmd/installed_already" ] && ! x ws installed_already; then
    #         if ! x ws install; then
    #             local exit=$?
    #             x:error "Exit=$exit: Installation failure."
    #             return "$exit"
    #         fi
    #     fi
    #     x ws run "$@"
    # fi

    if ! ___x_cmd_inner_cd "$___X_CMD_WX_RUN_OLD_PWD"; then
        x:error "Cannot return to original folder: $___X_CMD_WX_RUN_OLD_PWD"
    fi
}

___x_cmd_wx_is_workspace(){
    [ -d "${1:?Provide workspace}/.x-cmd" ]
}

___x_cmd_wx_is_workspace_runnable(){
    [ -f "${1:?Provide workspace}/.x-cmd/run" ]
}

___x_cmd_wx_pkg(){
    local workspace="${1:-.}"
    if ! ___x_cmd_wx_is_workspace_runnable "$workspace"; then
        x:error "Workspace is not runnable: $workspace | PWD: $PWD"
        return 1
    fi

    local target="${2:-${PWD##*/}.wx}"
    local cmd="tar --exclude=$target -czf $target $workspace"
    eval "$cmd"
    x:debug "Created tar: $cmd"
}

___x_cmd_wx_unpkg_(){
    local wxfile="${1:?Provide wx file}"; shift
    if [ ! -f "$wxfile" ]; then
        wxfile="$wxfile.wx"
        if [ ! -f "$wxfile" ]; then
            x:error "Exit=1 for ${wxfile#.wx} or $wxfile UNFOUND."
            return 1
        fi
    fi

    local md5sum
    md5sum="$(x md5 "$wxfile")"
    ___X_CMD_WX_UNPKG_="$___X_CMD_ROOT_TMP/wx/unpkg/${md5sum}"
    [ ! -d "$___X_CMD_ROOT_TMP/wx/unpkg/${md5sum}" ] || return 0

    if ! x mkdirp "$___X_CMD_ROOT_TMP/wx/unpkg"; then
        x:error "Exit=1 for wx unpack depend on folder: $___X_CMD_WX_UNPKG_"
        ___X_CMD_WX_UNPKG_=
        return 1
    fi

    x mkdirp "$___X_CMD_WX_UNPKG_"
    if ! tar xf "$wxfile"  --directory="$___X_CMD_WX_UNPKG_"; then
        x:error "Exit=1 for failure on delation: $wxfile"
        ___X_CMD_WX_UNPKG_=
        return 1
    fi
}

___x_cmd_wx_unpkg(){
    local ___X_CMD_WX_UNPKG_
    # FIXME: It hide the return code.
    ___x_cmd_wx_unpkg_ "$@"
    printf "%s\n" "$___X_CMD_WX_UNPKG_"
}

___x_cmd_wx_ls(){
    :
}
