using System.Threading.Tasks;
using static SharedLibraryCore.Database.Models.EFClient;

namespace SharedLibraryCore.Interfaces
{
    /// <summary>
    /// Defines the basic properties of a command
    /// </summary>
    public interface IManagerCommand
    {
        /// <summary>
        /// Executes the command
        /// </summary>
        /// <param name="gameEvent">event corresponding to the command</param>
        /// <returns></returns>
        Task ExecuteAsync(GameEvent gameEvent);

        /// <summary>
        /// Name of the command
        /// </summary>
        string Name { get; }

        /// <summary>
        /// Description of the command
        /// </summary>
        string Description { get; }

        /// <summary>
        /// Alternative name of the command
        /// </summary>
        string Alias { get; }

        /// <summary>
        /// Minimum permission required to execute the command
        /// </summary>
        Permission Permission { get; }

        /// <summary>
        /// Syntax for using the command
        /// </summary>
        string Syntax { get; }

        /// <summary>
        /// Indicates if target is required
        /// </summary>
        bool RequiresTarget { get; }
    }
}