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

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

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

    ___x_cmd_brew_ls___"${scope}"___"${fmt}"
}

# Section: ls --all
___x_cmd_brew_ls___all___raw(){
    # TODO: Provide the data
    local line
    ___x_cmd_brew___exec formulae | {
        read -r line
        ___x_cmd_cmds cat
    }
}

___x_cmd_brew_ls___all___csv(){   ___x_cmd_brew_ls___all___raw | ___x_cmd csv tab; }
___x_cmd_brew_ls___all___tsv(){   ___x_cmd_brew_ls___all___csv | ___x_cmd csv static_tab; }

___x_cmd_brew_ls___all___app(){
    brew:info "Find all software"
    local software=; software="$( ___X_CMD_RUNMODE="$___X_CMD_RUNMODE" ___x_cmdexe brew --fzdata ___x_cmd_brew_ls___all___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_ls___all___auto(){
    if      ___x_cmd_is_stdout2tty; then        ___x_cmd_brew_ls___all___app
    else                                        ___x_cmd_brew_ls___all___tsv
    fi
}
# EndSection

# Section: ls --install
___x_cmd_brew_ls___install___raw(){
    ___x_cmd_brew___exec list
}

___x_cmd_brew_ls___install___csv(){   ___x_cmd_brew_ls___install___raw | ___x_cmd csv tab; }
___x_cmd_brew_ls___install___tsv(){   ___x_cmd_brew_ls___install___csv | ___x_cmd csv static_tab; }

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

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

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

___x_cmd_brew_ls___install___auto(){
    if      ___x_cmd_is_stdout2tty; then        ___x_cmd_brew_ls___install___app
    else                                        ___x_cmd_brew_ls___install___tsv
    fi
}
# EndSection


___x_cmd_brew___fz_data(){
    "$@" | FZF_DEFAULT_OPTS="
--ansi
--reverse
--height='80%'
--bind='ctrl-w:toggle-preview-wrap'
--bind='ctrl-r:change-preview-window(right,70%|down,40%,99%,border-horizontal|hidden|right)'
"   ___x_cmd fzf --preview='HOMEBREW_COLOR=1 HOMEBREW_NO_EMOJI=0 ___x_cmdexe brew info {1} 2>/dev/null ' \
            --preview-window=right:70%:wrap
}

# ___x_cmd_brew_ls___available(){
#     ___x_cmd_brew___exec list -i
# }

