# shellcheck shell=dash

___x_cmd_gtb_txt(){
    [ $# -gt 0 ]   ||   set - -h

    local op="$1";      shift
    case "$op" in
        -h|--help)
            ___x_cmd help -m gtb txt;    return  ;;
        which|which_|cat|ccat)
            ___x_cmd_gtb_txt_"$op"      "$@"     ;;
        *)  ___x_cmd_gtb_txt_cat "$op"  "$@"     ;;
    esac
}

___x_cmd_gtb_txt_cat(){
    local id="$1"
    local x_
    ___x_cmd_gtb_txt_which_ "$id" || return

    if [ -t "$1" ]; then
        ___x_cmd_cmds less <"$x_"
    else
        ___x_cmd cat "$x_"
    fi
}

___x_cmd_gtb_txt_which(){
    local x_
    ___x_cmd ccmd 30d -- ___x_cmd_gtb_txt_which_ "$@" || return
    printf "%s\n" "$x_"
}

___x_cmd_gtb_txt_which_(){
    local id="$1"

    x_="$___X_CMD_GTB_FP_DATA/$id.txt"
    [ ! -f "$x_" ] || return 0

    ___x_cmd ensurefp "$x_"

    local url="https://www.gutenberg.org/files/$id/$id.txt"
    local url_="https://www.gutenberg.org/files/$id/$id-0.txt"

    if ___x_cmd curl --fail --retry 3 -C - -o "$x_" "$url" 2>/dev/null; then
        return 0
    elif ___x_cmd curl --fail --retry 3 -C - -o "$x_" "$url_"; then
        return 0
    else
        gtb:warn "Fail to download from -> $url_"
        gtb:info "x rmrf '$x_'"
        ___x_cmd rmrf "$x_"
        return 1
    fi
}

___x_cmd_gtb_txt_ccat(){
    ___x_cmd_gtb_show___raw "$@" | ___x_cmd_cmds awk \
            -f "$___X_CMD_ROOT_MOD/gtb/lib/awk/simplecolor.awk"
}
