# shellcheck shell=dash
___x_cmd_brew_lr(){
    [ $# -gt 0 ]    ||  set - --all

    case "$1" in
        -h|--help)      ___x_cmd help -m brew la; return ;;
    esac

    local scope=formulae
    local fmt=auto
    while [ $# -gt 0 ]; do
        case "$1" in
            -a|--all)       scope=all       ;;
            --formulae)     scope=formulae  ;;
            --casks)        scope=casks     ;;
            -c|--csv)       fmt=csv         ;;
            -t|--tsv)       fmt=tsv         ;;
            --auto|--app)   fmt="${1#--}"   ;;
            *)              break           ;;
        esac
        shift
    done

    ___x_cmd_brew_lr___"${scope}"___"${fmt}"
}

# Section: ls --formulae
___x_cmd_brew_lr___formulae___raw(){
    local line
    ___x_cmd_brew___exec formulae | {
        read -r line
        ___x_cmd_cmds cat
    }
}

___x_cmd_brew_lr___formulae___csv(){   ___x_cmd_brew_lr___formulae___raw | ___x_cmd csv tab; }
___x_cmd_brew_lr___formulae___tsv(){   ___x_cmd_brew_lr___formulae___csv | ___x_cmd csv static_tab; }

___x_cmd_brew_lr___formulae___app(){
    brew:info "Find all software"
    local software=; software="$( ___X_CMD_RUNMODE="$___X_CMD_RUNMODE" ___x_cmdexe brew --fzdata ___x_cmd_brew_lr___formulae___raw)" || return $?
    [ -n "$software" ] || {
        brew:error "Nor found software"
        return 1
    }

    local id=
    ___x_cmd ui select id "NEXT"   \
        "x brew install   $software"    \
        "x brew reinstall $software"    \
        "x brew info      $software"    \
        "x install        $software"    \
        "browse repo of   $software"    \
        "return"     || return $?

    case "$id" in
        1)      ___x_cmd brew install   "$software" ;;
        2)      ___x_cmd brew reinstall "$software" ;;
        3)      ___x_cmd brew info      "$software" ;;
        4)      ___x_cmd install        "$software" ;;
        5)      ___x_cmd browse "https://formulae.brew.sh/formula/${software}" ;;
        *)      return 0 ;;
    esac
}

___x_cmd_brew_lr___formulae___auto(){
    if      ___x_cmd_is_stdout2tty; then        ___x_cmd_brew_lr___formulae___app
    else                                        ___x_cmd_brew_lr___formulae___tsv
    fi
}
# EndSection

# Section: ls --casks
___x_cmd_brew_lr___casks___raw(){
    local line
    ___x_cmd_brew___exec casks | {
        read -r line
        ___x_cmd_cmds cat
    }
}

___x_cmd_brew_lr___casks___csv(){   ___x_cmd_brew_lr___casks___raw | ___x_cmd csv tab; }
___x_cmd_brew_lr___casks___tsv(){   ___x_cmd_brew_lr___casks___csv | ___x_cmd csv static_tab; }

___x_cmd_brew_lr___casks___app(){
    brew:info "Find all software"
    local software=; software="$( ___X_CMD_RUNMODE="$___X_CMD_RUNMODE" ___x_cmdexe brew --fzdata ___x_cmd_brew_lr___casks___raw)" || return $?
    [ -n "$software" ] || {
        brew:error "Nor found software"
        return 1
    }

    local id=
    ___x_cmd ui select id "NEXT"   \
        "x brew install   --cask $software"    \
        "x brew reinstall --cask $software"    \
        "x brew info      --cask $software"    \
        "x install        $software"    \
        "browse repo of   $software"    \
        "return"     || return $?

    case "$id" in
        1)      ___x_cmd brew install   --cask "$software" ;;
        2)      ___x_cmd brew reinstall --cask "$software" ;;
        3)      ___x_cmd brew info      --cask "$software" ;;
        4)      ___x_cmd install               "$software" ;;
        5)      ___x_cmd browse "https://formulae.brew.sh/cask/${software}" ;;
        *)      return 0 ;;
    esac
}

___x_cmd_brew_lr___casks___auto(){
    if      ___x_cmd_is_stdout2tty; then        ___x_cmd_brew_lr___casks___app
    else                                        ___x_cmd_brew_lr___casks___tsv
    fi
}
# EndSection

# Section: ls --all
___x_cmd_brew_lr___all___raw(){
    {
        ___x_cmd_brew___exec formulae
        ___x_cmd_brew___exec casks
    } | ___x_cmd_cmds uniq
}

___x_cmd_brew_lr___all___fzf(){
    ___x_cmd_brew___exec formulae
    ___x_cmd_brew___exec casks | ___x_cmd_cmds awk '{print "cask/" $0}'
}

___x_cmd_brew_lr___all___csv(){   ___x_cmd_brew_lr___all___raw | ___x_cmd csv tab; }
___x_cmd_brew_lr___all___tsv(){   ___x_cmd_brew_lr___all___csv | ___x_cmd csv static_tab; }

___x_cmd_brew_lr___all___app(){
    brew:info "Find all software"
    local software=; software="$( ___X_CMD_RUNMODE="$___X_CMD_RUNMODE" ___x_cmdexe brew --fzdata ___x_cmd_brew_lr___all___fzf)" || return $?

    case "$software" in
        "")         brew:error "Nor found software"; return 1 ;;
        cask/*)     software="${software#*/}" ;;
    esac

    local id=
    ___x_cmd ui select id "NEXT"   \
        "x brew install   $software"    \
        "x brew reinstall $software"    \
        "x brew info      $software"    \
        "x install        $software"    \
        "return"     || return $?

    case "$id" in
        1)      ___x_cmd brew install   "$software" ;;
        2)      ___x_cmd brew reinstall "$software" ;;
        3)      ___x_cmd brew info      "$software" ;;
        4)      ___x_cmd install        "$software" ;;
        *)      return 0 ;;
    esac
}

___x_cmd_brew_lr___all___auto(){
    if      ___x_cmd_is_stdout2tty; then        ___x_cmd_brew_lr___all___app
    else                                        ___x_cmd_brew_lr___all___tsv
    fi
}
# EndSection
