namespace EventsAppQuest.Core
{
    /// <summary>
    /// Candidato a alvo principal na camada de targeting: identificador, tipo, scores e origem.
    /// Usado pelo QuestTargetResolverController para escolher o alvo resolvido estável.
    /// </summary>
    public class QuestTargetCandidate
    {
        /// <summary>Identificador do alvo (ex.: "guided_step", "hotspot").</summary>
        public string TargetId { get; set; }

        /// <summary>Tipo do alvo (painel, hotspot, ação, etc.).</summary>
        public QuestPointableTargetType TargetType { get; set; }

        /// <summary>Score de prioridade (maior = mais prioritário na resolução).</summary>
        public float PriorityScore { get; set; }

        /// <summary>Score de estabilidade temporal (ex.: frames consecutivos no mesmo alvo).</summary>
        public float StabilityScore { get; set; }

        /// <summary>Score de visibilidade/centralidade (para futura integração com gaze).</summary>
        public float VisibilityScore { get; set; }

        /// <summary>Se true, o alvo é do mundo (futuro: objetos 3D). Por ora os painéis são UI.</summary>
        public bool IsWorldTarget { get; set; }

        /// <summary>Se true, o alvo é de UI (painéis, botões).</summary>
        public bool IsUITarget { get; set; } = true;

        /// <summary>Origem do candidato (focus fallback, simulado, XR raycast, futuro gaze).</summary>
        public QuestTargetSourceMode SourceMode { get; set; }

        /// <summary>Notas breves (ex.: para debug).</summary>
        public string Notes { get; set; }
    }
}
