# shellcheck shell=dash

# https://serverfault.com/questions/93407/what-command-prints-a-string-as-big-ascii-text-art-in-bash

___x_cmd_cowsay___main(){
    while [ $# -gt 0 ]; do
        case "$1" in
            -e) shift;  ;;
            -f) shift;  ;;
            -T) shift;  ;;
            -W) shift;  ;;

            -b) ;;
            -d) ;;
            -g) ;;
            -p) ;;
            -s) ;;
            -w) ;;
            -y) ;;

            -h|--help)  ___x_cmd help -m cowsay ; return 0 ;;
            -l) ;;
            -L) ;;
            *) break ;;
        esac
        shift
    done

    local IFS=" "
    text="$*" ___x_cmd_cowsay_run "$@"
}

___x_cmd_cowsay_run(){
    # TODO: if there is 256 or true color, using rainbow

    case "$1" in
        --clear)        ___x_cmd_cmds clear; shift ;;
    esac

    if { [ -t 1 ] && ___x_cmd_runmode_allow_manual ;}; then
        ___x_cmd_cowsay_run_ "$@" | ___x_cmd colr rainbow
    else
        ___x_cmd_cowsay_run_ "$@"
    fi
}

___x_cmd_cowsay_run_(){
    local IFS
    local typ="${1:-cow}"

    case "$typ" in
        --cow|--tux)    typ="${typ#--}" ;;
    esac

    case "$typ" in
        cow|tux)        [ "$#" -lt 1 ] || shift;  ;;
    esac

    printf "%s" "
 ______________________
< ${*:-$text} >
 ----------------------
"

    case "${typ:-cow}" in
        tux) ___x_cmd_cmds_cat <<'A'
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/
A
    ;;

        *) ___x_cmd_cmds_cat <<'A'
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
A
    ;;
    esac
}

___x_cmd_cowsay_bin(){
    x hascmd cowsay || x env use cowsay
    ___x_cmd_cowsay_bin(){
        # x perl "$___X_CMD_COWSAY_DIR/bin/cowsay" "$@"
        # command cowsay "$@"
        :
    }
    ___x_cmd_cowsay_bin "$@"
}

