# shellcheck shell=dash
# x qr webenc - generate a QR code via api.qrserver.com
#
# API: https://api.qrserver.com/v1/create-qr-code/
# Docs: https://goqr.me/api/doc/create-qr-code/

___x_cmd_qr_webenc(){
    [ "$#" -gt 0 ] || set -- --help

    local fp=""
    local size="300x300"
    local ecc="L"
    local color="000000"
    local bgcolor="ffffff"
    local margin="1"
    local qzone="4"
    local format="png"

    while [ $# -gt 0 ]; do
        case "$1" in
            -h|--help)              ___x_cmd help -m qr webenc; return 0 ;;
            -o|--output)            fp="$2";     arg:2:shift ;;
            -s|--size)              size="$2";   arg:2:shift ;;
            -e|--ecc)               ecc="$2";    arg:2:shift ;;
            -c|--color)             color="$2";  arg:2:shift ;;
            -b|--bgcolor)           bgcolor="$2";arg:2:shift ;;
            -m|--margin)            margin="$2"; arg:2:shift ;;
            -q|--qzone)             qzone="$2";  arg:2:shift ;;
            -f|--format)            format="$2"; arg:2:shift ;;
            --)                     shift; break ;;
            -*)                     N=qr M="Unknown option: $1" log:ret:64 ;;
            *)                      break ;;
        esac
    done

    [ $# -gt 0 ] || N=qr M="Please provide data to encode, like a url or text" log:ret:64
    local data="$1"

    printf '%s\n' "[privacy] webenc uses a 3rd-party service. Do not send sensitive data." >&2

    local url
    url="https://api.qrserver.com/v1/create-qr-code/?data=$(___x_cmd url encode "$data")"
    url="$url&size=$(___x_cmd url encode "$size")"
    url="$url&ecc=$(___x_cmd url encode "$ecc")"
    url="$url&color=$(___x_cmd url encode "$color")"
    url="$url&bgcolor=$(___x_cmd url encode "$bgcolor")"
    url="$url&margin=$margin"
    url="$url&qzone=$qzone"
    url="$url&format=$(___x_cmd url encode "$format")"

    if [ -n "$fp" ]; then
        ___x_cmd ensurefp "$fp"
        ___x_cmd curl --fail -sS "$url" -o "$fp" \
            || N=qr M="webenc request failed (network error or invalid options)" log:ret:1
        ___x_cmd_ui_tf true "Saved QR code to $fp"
    else
        ___x_cmd curl --fail -sS "$url" \
            || N=qr M="webenc request failed (network error or invalid options)" log:ret:1
    fi
}
