using System;
using System.Collections.Generic;

namespace EventsAppQuest.Web.Domain
{
    /// <summary>
    /// Métricas consolidadas do ciclo completo: indicadores de performance comercial e operacional (agregador).
    /// </summary>
    [Serializable]
    public class EventCycleMetricsState
    {
        public string CycleId;

        /// <summary>Duração estimada do ciclo em dias (heurística; 0 = não calculado).</summary>
        public int TotalCycleEstimatedDurationDays;

        public int QuestSessionCount;
        /// <summary>0-100: sinal de conclusão/qualidade da sessão Quest.</summary>
        public int QuestCompletionSignalScore;
        /// <summary>0-100: sinal de conversão comercial (proposta, oportunidade, sessão).</summary>
        public int CommercialConversionSignalScore;
        /// <summary>0-100: risco de atraso no handoff (maior = menor risco).</summary>
        public int HandoffDelayRiskScore;
        /// <summary>0-100: resposta e adesão do produtor.</summary>
        public int ProducerResponseScore;
        public int ScopeRevisionCount;
        /// <summary>0-100: atividade de comunicação (thread, mensagens).</summary>
        public int CommunicationActivityScore;
        /// <summary>0-100: prontidão de preparação (checklist).</summary>
        public int PreparationReadinessScore;
        /// <summary>0-100: progresso de execução.</summary>
        public int ExecutionProgressScore;
        /// <summary>0-100: conclusão do aceite final.</summary>
        public int FinalAcceptanceCompletionScore;

        /// <summary>0-100: score geral de performance do ciclo.</summary>
        public int OverallCyclePerformanceScore;
        /// <summary>Rótulo legível: Excellent, Good, Fair, Poor.</summary>
        public string PerformanceLabel;

        /// <summary>Principais fatores positivos (ex.: "Execução concluída", "Sessão Quest com decisão clara").</summary>
        public List<string> TopPositiveFactors = new List<string>();
        /// <summary>Principais fatores negativos (ex.: "Múltiplas revisões de escopo", "Alertas bloqueantes").</summary>
        public List<string> TopNegativeFactors = new List<string>();

        public DateTime? LastCalculatedAt;
    }
}
