using System.Collections.Generic;

namespace EventsAppQuest.Core
{
    /// <summary>
    /// Estado contextual de um hotspot na apresentação Quest: dados para o painel de ponto de venda imersivo.
    /// Usado pelo QuestHotspotContextController e pela sessão; preenchido a partir da proposta (ProposalVisualHotspot, passo, estado, decisão).
    /// Inclui micro-roteiro narrativo (etapa 49): passos de venda contextual.
    /// </summary>
    public class QuestHotspotContextState
    {
        /// <summary>Id do hotspot (ProposalVisualHotspot.Id).</summary>
        public string HotspotId { get; set; }

        /// <summary>Se true, o painel contextual deste hotspot está aberto.</summary>
        public bool IsContextOpen { get; set; }

        /// <summary>Título do contexto (ex.: do hotspot).</summary>
        public string ContextTitle { get; set; }

        /// <summary>Resumo do valor daquele ponto (2–3 frases).</summary>
        public string ContextSummary { get; set; }

        /// <summary>Mensagem comercial / pitch para este ponto.</summary>
        public string SalesMessage { get; set; }

        /// <summary>Id do passo guiado relacionado, se existir.</summary>
        public string RelatedGuidedStepId { get; set; }

        /// <summary>Id do estado de cena relacionado, se existir.</summary>
        public string RelatedSceneStateId { get; set; }

        /// <summary>Se true, é oportunidade de upsell premium.</summary>
        public bool IsPremiumUpsell { get; set; }

        /// <summary>Nível de prioridade de destaque (1 = mais alto).</summary>
        public int PriorityLevel { get; set; }

        /// <summary>Origem da abertura (ex.: "Selection", "Dwell", "ExplicitAction").</summary>
        public string OpenedBySource { get; set; }

        // --- Micro-roteiro narrativo (etapa 49) ---

        /// <summary>Passos do micro-roteiro de venda contextual (quando disponíveis).</summary>
        public List<QuestHotspotStoryStep> StorySteps { get; set; }

        /// <summary>Índice do passo actual no micro-roteiro (0-based); -1 se narrativa inactiva ou sem passos.</summary>
        public int CurrentStoryStepIndex { get; set; } = -1;

        /// <summary>Se true, a narrativa contextual está activa (utilizador está a percorrer o micro-roteiro).</summary>
        public bool IsStoryActive { get; set; }

        /// <summary>Passo actual do micro-roteiro (null se narrativa inactiva ou índice inválido).</summary>
        public QuestHotspotStoryStep CurrentStoryStep
        {
            get
            {
                if (StorySteps == null || StorySteps.Count == 0 || CurrentStoryStepIndex < 0 || CurrentStoryStepIndex >= StorySteps.Count)
                    return null;
                return StorySteps[CurrentStoryStepIndex];
            }
        }
    }
}
