using System;
using System.Collections.Generic;

namespace EventsAppQuest.Core
{
    /// <summary>
    /// Preset/modo de apresentação Quest: define estilo de condução (navegação, aiming, confirmação)
    /// e ênfases (hotspots, comparação, fechamento) para diferentes contextos comerciais.
    /// </summary>
    [Serializable]
    public class QuestPresentationPreset
    {
        /// <summary>Identificador único do preset (ex.: QuickPitch, GuidedSales).</summary>
        public string PresetId { get; set; }

        /// <summary>Nome curto para exibição.</summary>
        public string Name { get; set; }

        /// <summary>Descrição breve do preset.</summary>
        public string Description { get; set; }

        /// <summary>Tipo do preset (QuickPitch, GuidedSales, etc.).</summary>
        public QuestPresentationPresetType PresetType { get; set; }

        /// <summary>Caso de uso recomendado (ex.: "Cliente com pouco tempo", "Demonstração completa").</summary>
        public string RecommendedUseCase { get; set; }

        /// <summary>Secções priorizadas (ex.: GuidedTour, Hotspots, Comparison, Closing, Review).</summary>
        public List<string> PrioritizedSections { get; set; } = new List<string>();

        /// <summary>Se true, secções opcionais podem ser omitidas para encurtar.</summary>
        public bool SkipOptionalSections { get; set; }

        /// <summary>Modo de navegação por defeito ao aplicar o preset.</summary>
        public QuestPresentationNavigationMode DefaultNavigationMode { get; set; } = QuestPresentationNavigationMode.Guided;

        /// <summary>Modo de aiming por defeito ao aplicar o preset.</summary>
        public QuestAimingMode DefaultAimingMode { get; set; } = QuestAimingMode.XRRaycastPreferred;

        /// <summary>Modo de confirmação por defeito ao aplicar o preset.</summary>
        public QuestTargetConfirmationMode DefaultConfirmationMode { get; set; } = QuestTargetConfirmationMode.DwellOrExplicit;

        /// <summary>Se true, o preset enfatiza exploração de hotspots.</summary>
        public bool EmphasizeHotspots { get; set; }

        /// <summary>Se true, o preset enfatiza comparação entre hotspots.</summary>
        public bool EmphasizeComparison { get; set; }

        /// <summary>Se true, o preset enfatiza fechamento imersivo e CTA.</summary>
        public bool EmphasizeClosing { get; set; }

        /// <summary>Duração estimada em minutos (0 = não definida).</summary>
        public int EstimatedDurationMinutes { get; set; }
    }
}
