# typed: false
# frozen_string_literal: true

require "cli/parser"

module Homebrew
  module_function

  def commands_args
    Homebrew::CLI::Parser.new do
      usage_banner <<~EOS
        `commands` [<options>]

        Show lists of built-in and external commands.
      EOS
      switch "-q", "--quiet",
             description: "List only the names of commands without category headers."
      switch "--include-aliases",
             depends_on:  "--quiet",
             description: "Include aliases of internal commands."

      max_named 0
    end
  end

  def commands
    args = commands_args.parse

    if args.quiet?
      puts Formatter.columns(Commands.commands(aliases: args.include_aliases?))
      return
    end

    prepend_separator = false

    {
      "Built-in commands"           => Commands.internal_commands,
      "Built-in developer commands" => Commands.internal_developer_commands,
      "External commands"           => Commands.external_commands,
      "Cask commands"               => Commands.cask_internal_commands,
      "External cask commands"      => Commands.cask_external_commands,
    }.each do |title, commands|
      next if commands.blank?

      puts if prepend_separator
      ohai title, Formatter.columns(commands)

      prepend_separator ||= true
    end
  end
end
