using System;

namespace EventsAppQuest.Core
{
    /// <summary>
    /// Snapshot persistível da sessão Quest para save/restore local (persistência simulada).
    /// Usado pelo QuestSessionLocalPersistenceController; armazena estado mínimo para retomada coerente.
    /// </summary>
    [Serializable]
    public class QuestSessionLocalSnapshot
    {
        /// <summary>Identificador da sessão (ex.: do outcome ou export).</summary>
        public string SessionId { get; set; }

        /// <summary>Identificador do projeto.</summary>
        public string ProjectId { get; set; }

        /// <summary>Id da proposta ativa no momento do save.</summary>
        public string ActiveProposalId { get; set; }

        /// <summary>Modo de runtime no momento do save.</summary>
        public QuestPresentationRuntimeMode RuntimeMode { get; set; }

        /// <summary>Modo de navegação no momento do save.</summary>
        public QuestPresentationNavigationMode NavigationMode { get; set; }

        /// <summary>Índice do passo guiado (0-based).</summary>
        public int CurrentGuidedStepIndex { get; set; }

        /// <summary>Índice do hotspot em foco (0-based; -1 se nenhum).</summary>
        public int CurrentHotspotIndex { get; set; }

        /// <summary>Índice do estado de cena (0-based; -1 se nenhum).</summary>
        public int CurrentSceneStateIndex { get; set; }

        /// <summary>Se o painel de fechamento estava aberto no momento do save.</summary>
        public bool IsClosingOpen { get; set; }

        /// <summary>Estado da decisão comercial no momento do save.</summary>
        public QuestCommercialDecisionState LastDecisionState { get; set; }

        /// <summary>Último CTA confirmado (ex.: "PrimaryCTA", "SecondaryCTA").</summary>
        public string LastConfirmedCTA { get; set; }

        /// <summary>Se existia resultado comercial no momento do save.</summary>
        public bool HasCommercialOutcome { get; set; }

        /// <summary>Se existia payload de exportação no momento do save.</summary>
        public bool HasExportPayload { get; set; }

        /// <summary>Data/hora do save (ISO ou formato legível); para exibição e debug.</summary>
        public string SavedAt { get; set; }
    }
}
