# shellcheck shell=dash

___x_cmd_web_ua(){
    [ $# -gt 0 ]    ||  set -- ls

    local op="$1";  shift
    case "$op" in
        -h|--help)      ___x_cmd help -m web ua             "$@" ;;
        ls|list)        ___x_cmd_web_ua_ls                  "$@" ;;
        get|get_|rand|rand_)
                        ___x_cmd_web_ua_"$op"               "$@" ;;
        *)              ___x_cmd_web_ua_get         "$op"   "$@" ;;
    esac
}

___X_CMD_WEB_UA_NAME="
chrome
chrome-mac
chrome-win
chrome-android
firefox
firefox-mac
firefox-win
safari
safari-iphone
edge
iphone
links
curl
wget
googlebot
bingbot
"

___x_cmd_web_ua_ls(){
    printf "%s" "$___X_CMD_WEB_UA_NAME"
}

___x_cmd_web_ua_rand_(){
    local idx
    # Notice: We don't need all agents. Top 10 is enough.
    ___x_cmd rand int_ 0 10; idx="$x_"

    local cur
    while [ "$idx" -ge 1 ]; do
        idx=$((idx - 1))
        read -r cur
    done <<A
$___X_CMD_WEB_UA_NAME
A

    [ -n "$cur" ] ||     cur="chrome"
    ___x_cmd_web_ua_resolve_ "$cur"
}

___x_cmd_web_ua_rand(){
    ___x_cmd_web_ua_rand_ || return $?
    printf "%s\n" "$x_"
}

___x_cmd_web_ua_get(){
    local x_
    ___x_cmd_web_ua_get_ "$@" || {
        x:info "Unknown user agent -> $1"
        return $?
    }
    printf "%s\n" "$x_"
}

___x_cmd_web_ua_get_(){
    case "$1" in
        rand|random)    ___x_cmd_web_ua_rand_ ;;
        *)              ___x_cmd_web_ua_resolve_ "$1" ;;
    esac
}

___x_cmd_web_ua_resolve_(){
    local ua="$1"

    case "$ua" in
        links|""|default)       x_="";      return 0 ;;

        # Desktop Browsers
        chrome|chrome-mac)      x_="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" ;;
        chrome-win)             x_="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" ;;
        android|chrome-android) x_="Mozilla/5.0 (Linux; Android 14; SM-S918B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36" ;;

        firefox|firefox-mac)    x_="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/121.0" ;;
        firefox-win)            x_="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/121.0" ;;

        safari)                 x_="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15" ;;
        iphone|safari-iphone)   x_="Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1" ;;

        edge)                   x_="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0" ;;

        # CLI Tools
        curl)                   x_="curl/8.4.0" ;;
        wget)                   x_="Wget/1.21.4 (darwin22.6.0)" ;;

        # Bot / Crawler
        googlebot)              x_="Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" ;;
        bingbot)                x_="Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/103.0.5060.134 Safari/537.36" ;;

        *)                      x_="";      return 1 ;;
    esac
}
