class IMICFPS
  class Commands
    class HelpCommand < Command
      def group
        :global
      end

      def command
        :help
      end

      def handle(arguments, console)
        console.stdin(usage(arguments.first))
      end

      def autocomplete(console)
        split = console.text_input.text.split(" ")
        if !console.text_input.text.start_with?(" ") && split.size == 2
          list = console.abbrev_search(Commands::Command.list_commands.map { |cmd| cmd.command.to_s }, split.last)
          if list.size == 1
            console.text_input.text = "#{split.first} #{list.first} "
          elsif list.size > 1
            console.stdin(list.map { |cmd| Style.highlight(cmd) }.join(', '))
          end
        end
      end

      def usage(command = nil)
        if command
          if cmd = Command.find(command)
            cmd.usage
          else
            "#{Style.error(command)} is not a command"
          end
        else
          "Available commands:\n#{Command.list_commands.map { |cmd| "#{Style.highlight(cmd.command)}" }.join(', ')}"
        end
      end
    end
  end
end