using System;
using System.Collections.Generic;
using EventsAppQuest.Domain.Enums;

namespace EventsAppQuest.Domain.Models
{
    /// <summary>
    /// Resumo da revisão comercial da proposta (prontidão, pontos fortes, alertas, elementos ausentes).
    /// </summary>
    [Serializable]
    public class ProposalReviewSummary
    {
        /// <summary>Se true, a proposta está pronta para apresentação comercial.</summary>
        public bool IsReadyForPresentation { get; set; }

        /// <summary>Pontos fortes identificados.</summary>
        public List<string> Strengths { get; set; } = new List<string>();

        /// <summary>Alertas / avisos.</summary>
        public List<string> Warnings { get; set; } = new List<string>();

        /// <summary>Elementos ausentes ou a considerar.</summary>
        public List<string> MissingElements { get; set; } = new List<string>();

        /// <summary>Status da validação da composição (Valid, HasWarnings, Invalid).</summary>
        public CompositionValidationStatus ValidationStatus { get; set; }

        /// <summary>Nível de orçamento (ex.: Baixo, Médio, Alto).</summary>
        public string BudgetLevel { get; set; }

        /// <summary>Nome do tema visual (se selecionado).</summary>
        public string ThemeName { get; set; }

        /// <summary>Nome do preset aplicado (se identificável).</summary>
        public string PresetName { get; set; }

        /// <summary>Quantidade de etapas da narrativa de apresentação.</summary>
        public int PresentationStepCount { get; set; }

        /// <summary>Se true, o orçamento estimado está dentro ou próximo do alvo do briefing (quando há ClientBrief).</summary>
        public bool BudgetWithinTarget { get; set; }

        /// <summary>Se true, o tema/mood atual está alinhado ao mood desejado no briefing (quando há ClientBrief).</summary>
        public bool MoodMatchesBrief { get; set; }

        /// <summary>Resumo de capacidade/adequação operacional (ex.: "Layout confortável para 80 convidados").</summary>
        public string CapacitySummary { get; set; }

        /// <summary>Resumo do fluxo e logística operacional (ex.: "Fluxo adequado" ou "Risco de gargalo na entrada").</summary>
        public string FlowSummary { get; set; }

        /// <summary>Resumo do cronograma/montagem (ex.: "Montagem estimada 4h; pronta para execução" ou "Dependências a resolver").</summary>
        public string SetupTimelineSummary { get; set; }

        /// <summary>Resumo da cobertura por fornecedores (ex.: "Cobertura adequada" ou "Lacunas em montagem antecipada").</summary>
        public string SupplierCoverageSummary { get; set; }

        /// <summary>Leitura comercial: enquadramento no tier, possibilidade de upsell/downsell (ex.: "Proposta bem enquadrada no Standard").</summary>
        public string CommercialReadingSummary { get; set; }

        /// <summary>Resumo da jornada por momentos/fases (ex.: "Jornada com X fases; bom equilíbrio" ou "Lacunas em fases importantes").</summary>
        public string JourneySummary { get; set; }

        /// <summary>Quantidade de momentos/fases planejados na proposta.</summary>
        public int MomentPlanCount { get; set; }

        /// <summary>Resumo das transições entre fases (ex.: "Jornada fluida" ou "X reconfigurações críticas").</summary>
        public string TransitionSummary { get; set; }

        /// <summary>Quantidade de transições entre fases.</summary>
        public int TransitionCount { get; set; }

        /// <summary>Score médio de fluidez da jornada (0–100).</summary>
        public int AverageSmoothnessScore { get; set; }

        /// <summary>Resumo do roteiro guiado (ex.: "Roteiro claro" ou "X passos para apresentação ao cliente").</summary>
        public string GuidedTourSummary { get; set; }

        /// <summary>Quantidade de passos do roteiro guiado.</summary>
        public int GuidedTourStepCount { get; set; }

        /// <summary>Se true, a proposta está pronta para apresentação guiada ao cliente.</summary>
        public bool ReadyForGuidedPresentation { get; set; }

        /// <summary>Resumo dos hotspots visuais (ex.: "X pontos de destaque; alto impacto").</summary>
        public string VisualHotspotSummary { get; set; }

        /// <summary>Quantidade de hotspots/pontos de destaque visuais.</summary>
        public int VisualHotspotCount { get; set; }

        /// <summary>Título do hotspot principal (prioridade 1).</summary>
        public string PrimaryHotspotTitle { get; set; }

        /// <summary>Se true, existem destaques premium/upsell visuais.</summary>
        public bool HasPremiumHotspots { get; set; }

        /// <summary>Resumo dos estados visuais da cena (ex.: "X estados por fase; evolução estruturada").</summary>
        public string SceneStateSummary { get; set; }

        /// <summary>Quantidade de estados visuais da cena por fase.</summary>
        public int SceneStateCount { get; set; }

        /// <summary>Se true, a proposta tem evolução visual estruturada ao longo do evento.</summary>
        public bool HasStructuredVisualEvolution { get; set; }

        /// <summary>Se true, o plano de apresentação MR está pronto para mapeamento (roteiro/hotspots/estados coerentes).</summary>
        public bool ReadyForMRMapping { get; set; }

        /// <summary>Modo de apresentação MR sugerido (ex.: "Tour guiado", "Fechamento executivo").</summary>
        public string MRPresentationModeSuggested { get; set; }
    }
}
