using System.Collections.Generic;

namespace EventsAppQuest.Core
{
    /// <summary>
    /// Despacho central de comandos de input na apresentação Quest.
    /// Permite que qualquer fonte (teclado, futuro controlador, mão, gaze) emita comandos sem acoplamento aos controladores.
    /// </summary>
    public interface IQuestPresentationInputDispatcher
    {
        /// <summary>Despacha um comando para os controladores apropriados.</summary>
        /// <returns>True se o comando foi aceite e processado.</returns>
        bool Dispatch(QuestPresentationInputCommand command);

        /// <summary>Origem de input actual (última fonte que emitiu comando).</summary>
        QuestPresentationInputSourceType CurrentSource { get; }

        /// <summary>Últimos comandos recebidos (para debug/teste; ordem mais recente primeiro).</summary>
        IReadOnlyList<QuestPresentationInputCommand> GetLastCommands(int maxCount = 5);

        /// <summary>Define a origem de input actual (ex.: quando o adapter emite em modo editor).</summary>
        void SetCurrentSource(QuestPresentationInputSourceType source);
    }
}
