using LLM.Editor.Data;

namespace LLM.Editor.Commands
{
    /// <summary>
    /// Defines the possible outcomes of a command's execution.
    /// </summary>
    public enum CommandOutcome
    {
        /// <summary>
        /// The command completed successfully and the queue can proceed.
        /// </summary>
        Success,
        
        /// <summary>
        /// The command failed and the queue should be stopped.
        /// </summary>
        Error,

        /// <summary>
        /// The command has gathered context and is now waiting for the next
        /// turn of conversation with the LLM before the queue can proceed.
        /// </summary>
        AwaitingNextTurn 
    }
    
    public interface ICommand
    {
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <param name="context">A context object to pass runtime data between commands.</param>
        public CommandOutcome Execute(CommandContext context);
    }
}