using UnityEngine;
using UnityEngine.UI;
using EventsAppQuest.Web.Application;
using EventsAppQuest.Web.Domain;

namespace EventsAppQuest.Web.Presentation
{
    /// <summary>
    /// Mostra a relação entre oportunidade e sessão Quest: sessão associada, recomendação, CTA, próxima ação, prioridade.
    /// </summary>
    public class OpportunitySessionRelationView : MonoBehaviour, IWebContentRoot
    {
        private Transform _content;

        public void SetContentRoot(Transform contentRoot) => _content = contentRoot;

        private void Start()
        {
            Refresh();
            WebRuntimeContext.OnDataChanged += Refresh;
        }
        private void OnDestroy() => WebRuntimeContext.OnDataChanged -= Refresh;

        public void Refresh()
        {
            if (_content == null) return;
            ClearContent(_content);
            var service = WebRuntimeContext.DataService;
            if (service == null) return;
            var font = Resources.GetBuiltinResource<Font>("LegacyRuntime.ttf");

            foreach (var opp in service.GetOpportunities())
            {
                SessionRecord session = null;
                if (!string.IsNullOrEmpty(opp.SessionRecordId))
                {
                    foreach (var s in service.GetSessions())
                        if (s.Id == opp.SessionRecordId) { session = s; break; }
                }

                var go = new GameObject("OppSessionRow");
                go.transform.SetParent(_content, false);
                var hasLastQuest = !string.IsNullOrEmpty(opp.LastQuestSessionId);
                var rt = go.AddComponent<RectTransform>();
                rt.sizeDelta = new Vector2(0, session != null || hasLastQuest ? 88 : 22);
                var text = go.AddComponent<Text>();
                var line1 = $"[{opp.Title}] Sessão: {(session != null ? session.SessionId ?? session.Id : opp.LastQuestSessionId ?? "—")}";
                text.text = line1;
                if (session != null)
                {
                    text.text += "\n  Decisão: " + session.FinalDecisionState + " | Recom.: " + (session.RecommendedProposalId ?? "—") + " | Sel.: " + (session.SelectedProposalId ?? "—");
                    text.text += "\n  CTA: " + (session.ConfirmedCTA ?? "—") + " | Próx. ação: " + (session.SuggestedNextAction ?? "—") + " | Prioridade: " + session.FollowUpPriority;
                    text.text += "\n  Engajamento: " + (session.EngagementLabel ?? "—") + " | Qualidade: " + (session.QualityLabel ?? "—") + " | Resumo: " + (session.OutcomeSummary ?? "—");
                }
                else if (hasLastQuest)
                {
                    text.text += "\n  Decisão: " + (opp.LastQuestDecisionState?.ToString() ?? "—") + " | CTA: " + (opp.LastQuestCTA ?? "—") + " | Próx. ação: " + (opp.LastQuestNextAction ?? "—");
                    text.text += "\n  Prioridade: " + (opp.LastQuestFollowUpPriority?.ToString() ?? "—") + " | Engajamento: " + (opp.LastQuestEngagementLabel ?? "—") + " | Qualidade: " + (opp.LastQuestQualityLabel ?? "—");
                    text.text += "\n  Resumo: " + (opp.LastQuestSummary ?? "—");
                }
                text.font = font;
                text.fontSize = 11;
            }
        }

        private void ClearContent(Transform content)
        {
            for (var i = content.childCount - 1; i >= 0; i--)
                Destroy(content.GetChild(i).gameObject);
        }
    }
}
