# shellcheck shell=dash

# IMPORTANT: show people in advise how to shutdown the analytics

___x_cmd log init brew
xrc mirror
xrc:mod:lib     brew        ls lr util envfile/_index __xmirror/_index __xproxy analytics/_index install snap

___x_cmd_brew___main(){
    [ $# -gt 0 ]    ||  set - lr

    local op="$1";      shift
    case "$op" in
        -h|--help)  ___x_cmd help -m brew   "$@"; return ;;
    esac

    ___x_cmd hascmd brew   ||  {
        brew:warn "brew is not installed."
        return 1
    }

    case "$op" in
        i|install)          ___x_cmd_brew_install           "$@" ;;
        ls)                 ___x_cmd_brew_ls                "$@" ;;
        lr|la)               ___x_cmd_brew_lr                "$@" ;;

        mirror|--xmirror)   ___x_cmd_brew___mirror          "$@" ;;
        proxy|--xproxy)     ___x_cmd_brew___xproxy          "$@" ;;
        a|analytics)        ___x_cmd_brew_analytics         "$@" ;;
        # nv)                 ___x_cmd_brew___nv              "$@" ;;
        # fz)                 ___x_cmd_brew___fz              "$@" ;;
        --fzdata)           ___x_cmd_brew___fz_data         "$@" ;;

        snap|info)          ___x_cmd_brew_"$op"             "$@" ;;

        --)                 ___x_cmd_brew___exec            "$@" ;;

        u|upgrade)          ___x_cmd_brew_upgrade           "$@" ;;

        search|update|uninstall|list|config|doctor|create|edit|help)
                            ___x_cmd_brew___exec    "$op"   "$@" ;;

        *)                  ___x_cmd_brew_snap      "$op"   "$@" ;;
    esac
}

___x_cmd_brew___exec(){
    ___x_cmd_brew___xproxy run ___x_cmd_cmds brew "$@"
}

# If less than 1 seconds, just don't show message.
___x_cmd_brew_upgrade(){
    ___x_cmd_brew___exec upgrade "$@"
    local err=$?

    case "$err" in
        0)      ___x_cmd notify '✅ brew upgrade success.' ;;
        1)      ___x_cmd notify "🔍 brew upgrade failure [exitcode=$err]." ;;
    esac

    return $err
}

___x_cmd_brew_install(){
    local IFS=' '
    local args="$*"

    ___x_cmd_brew___exec install "$@"
    local err=$?

    case "$#" in
        0)      ;;
        *)
                case "$err" in
                    0)      ___x_cmd notify "✅ brew install $args" ;;
                    1)      ___x_cmd notify "🔍 Need help [exitcode=$err]: brew install $args" ;;
                esac ;;
    esac

    return $err
}


___x_cmd_brew_info(){
    local software="$1"

    case "$software" in
        cask/*)     ___x_cmd_brew___exec info "${software#cask/}" ;;
        *)          ___x_cmd_brew___exec info "$@" ;;
    esac
}

