using System;
using SlatedGameToolkit.Tools.CommandSystem.Interaction;
namespace SlatedGameToolkit.Tools.CommandSystem
{
public interface IInvocable : IDisposable
{
///
/// Invokers are the strings that should invoke this command.
/// This should not conflict with any other commands invokers.
///
/// A list of the strings that will invoke this invokable.
string[] GetInvokers();
///
/// The help should be a description of how to properly use this invokable.
/// If an argument is specified, the help should cater to that specific argument.
/// Information in the description does not need to be repeated.
/// Arguments will always be lowercase or null.
///
/// An argument this invokable should describe. May be null, to which should return a string that describes this invokable in general.
///
string getUsage(string arg);
///
/// Executes this invokable. Arguments will always be lowercase.
///
/// The interactable object.
/// The arguments that followed the invokable.
/// True if the invokable was successful, false otherwise to display a generic help message.
bool Execute(IInteractable interactable, string[] args);
///
/// Gets a simple description of the command.
///
/// Return a string with a short description of the command.
string getDescription();
}
}