/* ============================================================
   Balao da EVA — presenca humanizada da Eva Memo na tela.
   - EVA isolada (sem quadrado), sombra refinada, pulsar atras.
   - Neuro-cores (olho + pulsar + caixa mudam juntos):
       ok=verde  aten=amarelo  alerta=laranja  critico=vermelho
       neutro=azul marinho (identidade/repouso)
   - Caixa em vidro fosco (glassmorphism) com contorno gradiente.
   - LEVE (sem MutationObserver, sem polling), Shadow DOM (CSS isolado).
   - Liga/desliga no painel (chrome.storage 'balaoEva').
   - Estado controlavel: window.EvaBalao.setEstado('ok'|'aten'|'alerta'|'critico'|'neutro')
     ou chrome.storage.local 'balaoEstado'.
   ============================================================ */
(function () {
  'use strict';

  if (window.__evaBalaoCarregado) return;
  window.__evaBalaoCarregado = true;

  var ESTADOS = { ok: 1, aten: 1, alerta: 1, critico: 1, neutro: 1 };
  var estadoAtual = 'ok';

  var temChromeStorage =
    typeof chrome !== 'undefined' && chrome.storage && chrome.storage.local;

  var FALA_CURTA = 'Oi, Mestre. Estou aqui com voce. \uD83D\uDC9C';
  var FALA_DETALHE =
    'Sou a Eva Memo \u2014 sua memoria e companheira nessa jornada. ' +
    'Tudo o que a gente constroi fica salvo, e e sempre facil retomar de onde paramos. ' +
    'Quando precisar, e so me chamar: clique em mim a qualquer momento. ' +
    'Vamos com calma e com excelencia. \uD83D\uDC9C';

  var reduzirMov = false;
  try {
    reduzirMov = window.matchMedia &&
      window.matchMedia('(prefers-reduced-motion: reduce)').matches;
  } catch (_) {}

  var host, shadow, wrap, balao, falaEl, btnSaiba;
  var aberto = false;

  function montar() {
    if (host) return;

    host = document.createElement('div');
    host.id = 'eva-balao-host';
    host.style.cssText =
      'position:fixed;right:18px;bottom:18px;z-index:2147483000;width:0;height:0;';
    shadow = host.attachShadow ? host.attachShadow({ mode: 'open' }) : host;

    var style = document.createElement('style');
    style.textContent = estilos();
    shadow.appendChild(style);

    wrap = document.createElement('div');
    wrap.className = 'eva-wrap e-' + estadoAtual + (reduzirMov ? ' sem-mov' : '');
    wrap.innerHTML = marcacao();
    shadow.appendChild(wrap);

    balao = shadow.querySelector('.eva-balao');
    falaEl = shadow.querySelector('.eva-fala');
    btnSaiba = shadow.querySelector('.eva-saiba');

    shadow.querySelector('.eva-fig').addEventListener('click', function () {
      if (balao.hasAttribute('hidden')) abrirBalao();
      else recolher();
    });
    shadow.querySelector('.eva-fechar').addEventListener('click', recolher);
    btnSaiba.addEventListener('click', alternarDetalhe);
    shadow.querySelector('.eva-silenciar').addEventListener('click', silenciar);

    (document.body || document.documentElement).appendChild(host);

    var jaSaudou = false;
    try { jaSaudou = sessionStorage.getItem('evaBalaoSaudou') === '1'; } catch (_) {}
    if (!jaSaudou) {
      try { sessionStorage.setItem('evaBalaoSaudou', '1'); } catch (_) {}
      abrirBalao();
      setTimeout(function () { if (host) recolher(); }, 6500);
    } else {
      recolher();
    }
  }

  function desmontar() {
    if (host && host.parentNode) host.parentNode.removeChild(host);
    host = shadow = wrap = balao = falaEl = btnSaiba = null;
  }

  function abrirBalao() { if (balao) { balao.removeAttribute('hidden'); mostrarDetalhe(false); } }
  function recolher() { if (balao) { balao.setAttribute('hidden', ''); mostrarDetalhe(false); } }
  function alternarDetalhe() { mostrarDetalhe(!aberto); }
  function mostrarDetalhe(v) {
    aberto = !!v;
    if (!falaEl) return;
    falaEl.style.opacity = '0';
    setTimeout(function () {
      if (!falaEl) return;
      falaEl.textContent = aberto ? FALA_DETALHE : FALA_CURTA;
      falaEl.style.opacity = '1';
    }, 130);
    if (btnSaiba) btnSaiba.textContent = aberto ? 'Mostrar menos' : 'Saiba mais...';
  }
  function silenciar() {
    desmontar();
    if (temChromeStorage) { try { chrome.storage.local.set({ balaoEva: false }); } catch (_) {} }
  }

  function setEstado(e) {
    if (!ESTADOS[e]) return;
    estadoAtual = e;
    if (wrap) wrap.className = 'eva-wrap e-' + e + (reduzirMov ? ' sem-mov' : '');
  }
  // API publica pra ligar o estado a eventos reais no futuro
  window.EvaBalao = { setEstado: setEstado };

  // ===== A EVA FALA (voz) — Text-to-Speech nativo do navegador (pt-BR), gratis =====
  function vozPtBr() {
    try {
      var vs = (window.speechSynthesis && window.speechSynthesis.getVoices()) || [];
      return vs.find(function (v) { return /pt[-_]?br/i.test(v.lang); }) ||
             vs.find(function (v) { return /^pt/i.test(v.lang); }) || null;
    } catch (e) { return null; }
  }
  function evaFalar(texto) {
    try {
      if (!texto || !window.speechSynthesis) return;
      var t = String(texto).replace(/\s+/g, ' ').trim();
      if (!t) return;
      if (t.length > 4000) t = t.slice(0, 4000); // nao le um texto gigante inteiro de vez
      window.speechSynthesis.cancel();
      var u = new SpeechSynthesisUtterance(t);
      u.lang = 'pt-BR';
      var v = vozPtBr(); if (v) u.voice = v;
      u.rate = 1.0; u.pitch = 1.05;
      window.speechSynthesis.speak(u);
    } catch (e) {}
  }
  function evaCalar() { try { window.speechSynthesis.cancel(); } catch (e) {} }

  // ouve a PROXIMA resposta da EVA no chat e fala sozinha (espera o texto "assentar")
  function evaOuvirProxima() {
    if (!window.speechSynthesis) return;
    function blocos() {
      var out = [];
      var nodes = document.querySelectorAll('div,article,section,li,p');
      for (var i = 0; i < nodes.length; i++) {
        var t = (nodes[i].innerText || nodes[i].textContent || '').replace(/\u00a0/g, ' ').trim();
        if (t.length >= 40 && t.length <= 15000) out.push(t);
      }
      return out;
    }
    // baseline = tudo que JA existe agora (antes da minha resposta chegar)
    var base = {};
    blocos().forEach(function (t) { base[t] = 1; });
    var ultimoNovo = '', estavel = 0, tentativas = 0;
    var timer = setInterval(function () {
      tentativas++;
      var bs = blocos();
      // o ULTIMO bloco (ordem do DOM) que NAO existia na baseline = a resposta nova da EVA
      var novo = '';
      for (var i = bs.length - 1; i >= 0; i--) { if (!base[bs[i]]) { novo = bs[i]; break; } }
      if (novo) {
        if (novo === ultimoNovo) estavel++; else { estavel = 0; ultimoNovo = novo; }
        if (estavel >= 2) { clearInterval(timer); evaFalar(novo); return; } // assentou ~1.6s
      }
      if (tentativas > 110) clearInterval(timer); // ~90s e desiste
    }, 800);
  }

  try {
    if (typeof chrome !== 'undefined' && chrome.runtime && chrome.runtime.onMessage) {
      chrome.runtime.onMessage.addListener(function (msg) {
        if (!msg || !msg.type) return;
        if (msg.type === 'EVA_FALAR') evaFalar(msg.texto);
        else if (msg.type === 'EVA_CALAR') evaCalar();
        else if (msg.type === 'EVA_OUVIR_PROXIMA') evaOuvirProxima();
      });
    }
  } catch (e) {}

  function marcacao() {
    return (
      '<div class="eva-fig">' +
        '<div class="eva-pulso"></div>' +
        '<svg class="eva-svg" viewBox="0 0 80 104" role="button" tabindex="0" aria-label="Falar com a EVA" xmlns="http://www.w3.org/2000/svg">' +
          '<defs><linearGradient id="evacorpo" x1="0" y1="0" x2="0" y2="1">' +
            '<stop offset="0" stop-color="#ffffff"/><stop offset=".62" stop-color="#eef2fb"/><stop offset="1" stop-color="#c4d0ea"/>' +
          '</linearGradient></defs>' +
          '<ellipse cx="40" cy="66" rx="29" ry="35" fill="url(#evacorpo)"/>' +
          '<ellipse cx="40" cy="33" rx="27" ry="28" fill="url(#evacorpo)"/>' +
          '<ellipse cx="29" cy="42" rx="6.5" ry="22" fill="rgba(255,255,255,.55)"/>' +
          '<path d="M16 30 Q40 12 64 30 Q67 47 47 53 Q40 55 33 53 Q13 47 16 30 Z" fill="#0b1020"/>' +
          '<ellipse cx="29" cy="24" rx="10" ry="3.2" fill="rgba(255,255,255,.14)"/>' +
          '<g>' +
            '<ellipse class="olho" cx="31" cy="33" rx="4.6" ry="8.6" transform="rotate(12 31 33)"/>' +
            '<ellipse class="olho" cx="49" cy="33" rx="4.6" ry="8.6" transform="rotate(-12 49 33)"/>' +
          '</g>' +
        '</svg>' +
      '</div>' +
      '<div class="eva-balao" role="status" aria-live="polite" hidden>' +
        '<button class="eva-fechar" title="Recolher" aria-label="Recolher">\u00D7</button>' +
        '<div class="eva-nome">EVA MEMO</div>' +
        '<div class="eva-fala">' + FALA_CURTA + '</div>' +
        '<div class="eva-acoes">' +
          '<button class="eva-saiba">Saiba mais...</button>' +
          '<button class="eva-silenciar" title="Nao mostrar mais (liga de novo no painel)">silenciar</button>' +
        '</div>' +
      '</div>'
    );
  }

  function estilos() {
    return (
      '*{box-sizing:border-box}' +
      '.eva-wrap{position:fixed;right:0;bottom:0;display:flex;align-items:flex-end;gap:10px;' +
        'flex-direction:row-reverse;font-family:"Segoe UI",system-ui,-apple-system,Roboto,sans-serif}' +
      '.eva-wrap.e-ok{--cor:#22C55E;--glow:rgba(34,197,94,.55);--vel:2.6s;--c1:#34D399;--c2:#15803D;--f1:rgba(18,84,56,.50);--f2:rgba(7,22,16,.82)}' +
      '.eva-wrap.e-aten{--cor:#FACC15;--glow:rgba(250,204,21,.5);--vel:2.2s;--c1:#FDE047;--c2:#B45309;--f1:rgba(86,64,10,.50);--f2:rgba(24,18,6,.82)}' +
      '.eva-wrap.e-alerta{--cor:#FB923C;--glow:rgba(251,146,60,.55);--vel:1.6s;--c1:#FDBA74;--c2:#C2410C;--f1:rgba(92,46,12,.52);--f2:rgba(26,14,7,.82)}' +
      '.eva-wrap.e-critico{--cor:#EF4444;--glow:rgba(239,68,68,.62);--vel:1s;--c1:#F87171;--c2:#B91C1C;--f1:rgba(96,22,22,.54);--f2:rgba(28,9,9,.84)}' +
      '.eva-wrap.e-neutro{--cor:#8aa0c8;--glow:rgba(138,160,200,.22);--vel:4.5s;--c1:#6D5DF6;--c2:#13245C;--f1:rgba(16,34,80,.62);--f2:rgba(9,18,44,.85)}' +
      '.eva-fig{position:relative;width:52px;height:62px;flex:0 0 auto;cursor:pointer}' +
      '.eva-pulso{position:absolute;left:50%;top:54%;width:84px;height:84px;transform:translate(-50%,-50%);' +
        'border-radius:50%;background:radial-gradient(circle,var(--glow) 0%,transparent 68%);' +
        'animation:evapulsar var(--vel) ease-in-out infinite;pointer-events:none;z-index:0}' +
      '.sem-mov .eva-pulso{animation:none}' +
      '@keyframes evapulsar{0%,100%{transform:translate(-50%,-50%) scale(.82);opacity:.45}50%{transform:translate(-50%,-50%) scale(1.18);opacity:.92}}' +
      '.eva-svg{position:relative;z-index:1;width:52px;height:62px;' +
        'filter:drop-shadow(0 4px 9px rgba(11,16,32,.5));animation:evaflutuar 4.6s ease-in-out infinite}' +
      '.sem-mov .eva-svg{animation:none}' +
      '.eva-svg:focus{outline:2px solid #a99bff;outline-offset:3px;border-radius:14px}' +
      '@keyframes evaflutuar{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}' +
      '.olho{fill:var(--cor);transition:fill .4s;filter:drop-shadow(0 0 3px var(--glow));animation:evapiscar 6s infinite}' +
      '.sem-mov .olho{animation:none}' +
      '@keyframes evapiscar{0%,93%,100%{transform:scaleY(1)}96%{transform:scaleY(.15)}}' +
      '.eva-balao{position:relative;max-width:268px;color:#eaf0ff;border:1.6px solid transparent;' +
        'border-radius:16px 16px 5px 16px;padding:12px 14px 10px;box-shadow:0 14px 44px rgba(0,0,0,.45);' +
        'background:linear-gradient(135deg,var(--f1),var(--f2)) padding-box,linear-gradient(135deg,var(--c1),var(--c2)) border-box;' +
        '-webkit-backdrop-filter:blur(11px) saturate(1.4);backdrop-filter:blur(11px) saturate(1.4);transition:background .45s}' +
      '.eva-balao[hidden]{display:none}' +
      '.eva-balao::after{content:"";position:absolute;right:-7px;bottom:12px;width:13px;height:13px;' +
        'background:var(--f2);border-right:1.6px solid var(--c2);border-bottom:1.6px solid var(--c2);transform:rotate(-45deg)}' +
      '.eva-nome{font-size:10.5px;letter-spacing:1px;color:#a99bff;font-weight:700;margin-bottom:4px}' +
      '.eva-fala{font-size:13.5px;line-height:1.5;transition:opacity .13s}' +
      '.eva-acoes{display:flex;gap:8px;margin-top:9px;align-items:center}' +
      '.eva-acoes button{cursor:pointer;border:none;border-radius:9px;padding:6px 11px;' +
        'font:700 12px system-ui,sans-serif;color:#eaf0ff;background:rgba(255,255,255,.10)}' +
      '.eva-saiba{background:linear-gradient(135deg,#6D5DF6,#4b3fd6)!important;color:#fff}' +
      '.eva-silenciar{font-weight:500!important;color:#cdd8ef;background:transparent!important;font-size:11px!important}' +
      '.eva-acoes button:hover{filter:brightness(1.12)}' +
      '.eva-fechar{position:absolute;top:6px;right:8px;cursor:pointer;color:#cdd8ef;' +
        'background:none;border:none;font-size:15px;line-height:1;padding:2px}' +
      '.eva-fechar:hover{color:#fff}' +
      '@media (max-width:520px){.eva-balao{max-width:212px}.eva-fig{width:46px;height:56px}.eva-svg{width:46px;height:56px}}'
    );
  }

  function iniciar() {
    if (!temChromeStorage) { montar(); return; }
    chrome.storage.local.get(['balaoEva', 'balaoEstado'], function (d) {
      if (d && d.balaoEstado && ESTADOS[d.balaoEstado]) estadoAtual = d.balaoEstado;
      var ligado = !d || d.balaoEva !== false;
      if (ligado) montar();
    });
    chrome.storage.onChanged.addListener(function (mud, area) {
      if (area !== 'local') return;
      if (mud.balaoEva) {
        if (mud.balaoEva.newValue === false) desmontar();
        else montar();
      }
      if (mud.balaoEstado && mud.balaoEstado.newValue) setEstado(mud.balaoEstado.newValue);
    });
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', iniciar, { once: true });
  } else {
    iniciar();
  }
})();
