# shellcheck shell=dash

___x_cmd_pkgx___install(){
    if [ -f "$___X_CMD_PKGX_BIN_PATH/pkgx" ]; then
        pkgx:info "pkgx is already installed."
    else
        ___x_cmd_pkgx___download_inner "$@" || return
    fi

    ___x_cmd_pkgx___activate_auto
}

___x_cmd_pkgx___uninstall(){
    {
        ___x_cmd_pkgx___deactivate
        ___x_cmd rmrf "$___X_CMD_ROOT_BOOT/pkgx.disable" "$___X_CMD_PKGX_BIN_PATH/pkgx" "$___X_CMD_PKGX_CACHE_PATH" "$HOME/.pkgx"
    } || return

    pkgx:info "Deleted 'pkgx' binary, pkgx uninstall successfully!"
}

___x_cmd_pkgx___get_latest_version_(){
    local latest_version=
    latest_version="$(___x_cmd gh repo release latest -r pkgxdev/pkgx | grep "Tag:")"
    x_="${latest_version#*v}"
}

___x_cmd_pkgx___upgrade(){
    [ -f "$___X_CMD_PKGX_BIN_PATH/pkgx" ] || {
        pkgx:error "pkgx is not installed."
        return 1
    }

    local version=
    version="$(___x_cmd_pkgx___cmd --version)"
    version="${version#* }"

    local x_=
    local latest_version=
    x_=; ___x_cmd_pkgx___get_latest_version_    || return 0
    latest_version="$x_"

    [ -n "$latest_version" ] || latest_version="latest"

    [ "$version" != "$latest_version" ] || {
        pkgx:info "Pkgx is already up-to-date (version $version)."
        return 0
    }

    pkgx:info "Pkgx will be updated from $version to $latest_version"
    ___x_cmd_pkgx___download_inner || return
    pkgx:info "Pkgx has been updated to version $latest_version."
}
