# shellcheck shell=dash

# https://formulae.brew.sh/analytics/
___x_cmd_brew_analytics_data(){
    [ $# -gt 0 ]    || set - nv

    local op="$1";  shift
    case "$op" in
        open|browse)    ___x_cmd_brew_analytics_data_open "$@" ;;
        nv)             ___x_cmd_brew_analytics_data_nv   "$@" ;;

        install-homebrew-core)
            ___x_cmd_brew_analytics_data__curl "/install/homebrew-core/" "$@" ;;
        install-on-request-homebrew-core)
            ___x_cmd_brew_analytics_data__curl "/install-on-request/homebrew-core" "$@" ;;
        cask|cask-install)
            ___x_cmd_brew_analytics_data__curl "/cask-install/homebrew-cask" "$@" ;;
        error|build-error)
            ___x_cmd_brew_analytics_data__curl "/build-error/homebrew-core" "$@" ;;

        -h|--help)
            ___x_cmd help -m brew analytics data  "$@" ;;
        *)
            N=brew M="Not support [op=$op]" log:ret:64 ;;
    esac
}

___x_cmd_brew_analytics_data___yml(){
    local data;             data="$( ___x_cmd_brew_analytics_data___raw "$@" )"     || brew:data:ret
    ___x_cmd_pipevar data   ___x_cmd j2y
}

___x_cmd_brew_analytics_data___csv(){
    local data;             data="$( ___x_cmd_brew_analytics_data___raw "$@" )"     || brew:data:ret
    ___x_cmd_pipevar data  ___x_cmd jq -r '.formulae | to_entries | map(.value[]) | sort_by(.count | gsub(","; "") | tonumber) | reverse | .[] | [.formula // .cask, .count | gsub(","; "") ] | @csv' 2>/dev/null # 0.34s
    # ___x_cmd_pipevar data ___x_cmd_brew_analytics_data___parse_json2csv # 2.30s
}

___x_cmd_brew_analytics_data___app(){
    local data;             data="$( ___x_cmd_brew_analytics_data___csv "$@" )"     || brew:data:ret
    ___x_cmd_pipevar data   ___x_cmd csv header --add item count |   ___x_cmd csv --app
}

___x_cmd_brew_analytics_data___json(){
    local data;             data="$( ___x_cmd_brew_analytics_data___raw "$@" )"     || brew:data:ret
    ___x_cmd_pipevar data
}

___x_cmd_brew_analytics_data__curl(){
    local url="$1"; shift
    local days=365
    local format=

    while [ "$#" -gt 0 ]; do
        case "$1" in
            --365)  days=365 ; shift ;;
            --90)   days=90  ; shift ;;
            --30)   days=30  ; shift ;;
            --yml|--json|--csv|--app)
                    format=${1##--} ; shift ;;

            *)      N=brew M="Not support [option=$1]" log:ret:64 ;;
        esac
    done

    if [ -z "$format" ]; then
        if  ! ___x_cmd_brew_is_interactive_env; then
            format=yml
        else
            format=app
        fi
    fi

    if [ "$url" = "/build-error/homebrew-core" ]; then
        brew:info "Data of build-error only provides data within 30 days"
        days=30
    fi
    # ccmd 7 days ...
    ___x_cmd_brew_analytics_data___"$format" "${url}" "${days}"
}

___x_cmd_brew_analytics_data___raw(){
    local url="$1"; local days="$2"
    ___x_cmd ccmd 7d -- ___x_cmd curl --fail-with-body -sS \
                "https://formulae.brew.sh/api/analytics/${url}/${days}d.json"
}

___x_cmd_brew_analytics_data___parse_json2csv(){
    local url=
    ___x_cmd ja -v url="$op" -f "$___X_CMD_ROOT_MOD/brew/lib/analytics/awk/data.awk"
}

___x_cmd_brew_analytics_data_nv(){
    local id
    ___x_cmd ui select id "Which data do you want to see?" \
        "x brew analytics data install-homebrew-core                # install-homebrew-core" \
        "x brew analytics data install-on-request-homebrew-core     # install-on-request-homebrew-core" \
        "x brew analytics data cask                                 # cask" \
        "x brew analytics data error                                # error"

    case "$id" in
        1) ___x_cmd brew analytics data install-homebrew-core ;;
        2) ___x_cmd brew analytics data install-on-request-homebrew-core ;;
        3) ___x_cmd brew analytics data cask ;;
        4) ___x_cmd brew analytics data error ;;
    esac
    # 90, 3
}

___x_cmd_brew_analytics_data_open(){
    local days=""
    case "$1" in
        --365)  days=365 ;;
        --90)   days=90 ;;
        --30)   days=30 ;;
    esac

    if [ -z "$days" ]; then
        ___x_cmd browse "https://formulae.brew.sh/analytics"
    else
        ___x_cmd browse "https://formulae.brew.sh/analytics/install/$days"
    fi
}
