using UnityEngine;

namespace EventsAppQuest.Core
{
    /// <summary>
    /// Comando de input abstrato na apresentação Quest: tipo, origem, timestamp e dica de contexto.
    /// Permite despacho central e log sem acoplar fontes de input aos controladores.
    /// </summary>
    public class QuestPresentationInputCommand
    {
        /// <summary>Tipo do comando (foco, seleção, apontamento, navegação).</summary>
        public QuestPresentationInputCommandType CommandType { get; set; }

        /// <summary>Origem do input (teclado, editor, simulado, futuro controlador/mão/gaze).</summary>
        public QuestPresentationInputSourceType Source { get; set; }

        /// <summary>Momento do comando (UTC ou tempo de jogo).</summary>
        public float Timestamp { get; set; }

        /// <summary>Dica opcional de contexto (ex.: TargetId quando vier de raycast).</summary>
        public string ContextHint { get; set; }

        public static QuestPresentationInputCommand Create(QuestPresentationInputCommandType type, QuestPresentationInputSourceType source, string contextHint = null)
        {
            return new QuestPresentationInputCommand
            {
                CommandType = type,
                Source = source,
                Timestamp = UnityEngine.Time.time,
                ContextHint = contextHint
            };
        }
    }
}
