<?php
/** @var string $versaoAtual @var string $versaoData @var string $urlConfig */
?>
<div class="pbi-page-header">
  <h1 class="pbi-page-title"><i class="bi bi-arrow-repeat me-2 text-accent"></i>Atualização do Sistema</h1>
</div>

<!-- Versão atual -->
<div class="pbi-card">
  <div class="pbi-card-body d-flex align-items-center justify-content-between flex-wrap gap-2">
    <div>
      <div class="small text-muted">Versão instalada</div>
      <div class="h4 mb-0">v<?= htmlspecialchars($versaoAtual) ?>
        <span class="text-muted" style="font-size:.8rem;font-weight:400"><?= $versaoData ? '· ' . htmlspecialchars($versaoData) : '' ?></span>
      </div>
    </div>
    <button class="btn btn-primary" id="btn-verificar"><i class="bi bi-arrow-repeat me-1"></i>Verificar atualização</button>
  </div>
</div>

<!-- Resultado da verificação -->
<div class="pbi-card" id="card-result" style="display:none">
  <div class="pbi-card-body" id="result"></div>
</div>

<!-- Fonte de atualização (URL) -->
<div class="pbi-card">
  <div class="pbi-card-header"><i class="bi bi-link-45deg me-2"></i>Fonte de atualização</div>
  <div class="pbi-card-body">
    <div class="pbi-hint mb-2" style="margin-top:0">
      Endereço do <strong>manifesto</strong> (arquivo <code>versao.json</code> que você publica ao lançar uma versão).
      Deve devolver: <code>versao</code>, <code>data</code>, <code>notas</code> e <code>url_zip</code> (link do pacote .zip).
    </div>
    <div class="row g-2 align-items-end">
      <div class="col-12 col-md">
        <label class="form-label small mb-1">URL do manifesto</label>
        <input type="url" id="f_url" class="form-control form-control-sm" placeholder="https://seuservidor.com/premiumbi/versao.json" value="<?= htmlspecialchars($urlConfig) ?>">
      </div>
      <div class="col-12 col-md-auto">
        <button class="btn btn-sm btn-outline-secondary" id="btn-salvar-url"><i class="bi bi-save me-1"></i>Salvar URL</button>
      </div>
    </div>
    <div class="small mt-2" id="url-msg"></div>
  </div>
</div>

<script>
(function () {
'use strict';
var ATUAL = <?= json_encode($versaoAtual) ?>;
function $(id){ return document.getElementById(id); }
function esc(s){ var d=document.createElement('div'); d.textContent=(s==null?'':s); return d.innerHTML; }
function api(u, opt){ return fetch(u, Object.assign({credentials:'same-origin'}, opt||{})).then(function(r){ return r.json().catch(function(){ throw new Error('Resposta inválida do servidor'); }); }); }

function salvarUrl(){
  var fd = new FormData(); fd.append('url', $('f_url').value.trim());
  $('url-msg').innerHTML = '<span class="text-muted">Salvando…</span>';
  api('/api/configurar/atualizacao/url', {method:'POST', body:fd}).then(function(d){
    $('url-msg').innerHTML = d.ok ? '<span class="text-success"><i class="bi bi-check-circle me-1"></i>URL salva.</span>'
                                  : '<span class="text-danger">'+esc(d.erro||'Erro ao salvar')+'</span>';
  }).catch(function(e){ $('url-msg').innerHTML = '<span class="text-danger">'+esc(e.message)+'</span>'; });
}

function verificar(){
  $('card-result').style.display = '';
  $('result').innerHTML = '<p class="text-center text-muted py-3 mb-0"><span class="spinner-border spinner-border-sm me-2"></span>Verificando…</p>';
  api('/api/configurar/atualizacao/verificar').then(function(d){
    if (!d.ok){
      $('result').innerHTML = '<div class="alert alert-warning mb-0"><i class="bi bi-exclamation-triangle me-2"></i>'+esc(d.erro)+'</div>';
      return;
    }
    if (!d.atualizar){
      $('result').innerHTML = '<div class="alert alert-success mb-0"><i class="bi bi-check-circle-fill me-2"></i>'
        + 'Você já está na versão mais recente (<strong>v'+esc(d.atual)+'</strong>).</div>';
      return;
    }
    var notas = (d.notas||'').trim();
    var h = '<div class="d-flex align-items-center gap-3 flex-wrap mb-2">'
      + '<span class="badge bg-secondary" style="font-size:.9rem">Atual: v'+esc(d.atual)+'</span>'
      + '<i class="bi bi-arrow-right text-muted"></i>'
      + '<span class="badge bg-success" style="font-size:.9rem">Nova: v'+esc(d.nova)+(d.data?(' · '+esc(d.data)):'')+'</span></div>';
    if (notas) h += '<div class="mb-3"><div class="small text-muted mb-1">O que mudou:</div><div style="white-space:pre-line;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:.6rem .8rem;font-size:.85rem">'+esc(notas)+'</div></div>';
    if (d.tem_zip){
      h += '<button class="btn btn-success" id="btn-aplicar"><i class="bi bi-download me-1"></i>Atualizar agora para a v'+esc(d.nova)+'</button>'
        + '<div class="small text-muted mt-2">A atualização baixa o pacote, substitui o sistema e recarrega. Não feche a janela durante o processo.</div>';
    } else {
      h += '<div class="alert alert-warning mb-0">Há versão nova, mas o manifesto não informou o <code>url_zip</code> (link do pacote).</div>';
    }
    $('result').innerHTML = h;
    var b = $('btn-aplicar'); if (b) b.addEventListener('click', function(){ aplicar(d.nova); });
  }).catch(function(e){ $('result').innerHTML = '<div class="alert alert-danger mb-0">'+esc(e.message)+'</div>'; });
}

function aplicar(nova){
  if (!confirm('Atualizar o sistema para a versão v'+nova+' agora?\n\nO sistema será substituído e recarregado. Não feche a janela.')) return;
  $('result').innerHTML = '<p class="text-center py-3 mb-0"><span class="spinner-border spinner-border-sm me-2"></span>Baixando e instalando a v'+esc(nova)+'… (pode levar até 1 minuto)</p>';
  api('/api/configurar/atualizacao/aplicar', {method:'POST'}).then(function(d){
    if (d.ok){
      $('result').innerHTML = '<div class="alert alert-success mb-0"><i class="bi bi-check-circle-fill me-2"></i>'
        + 'Atualizado para a <strong>v'+esc(d.nova)+'</strong>! Recarregando…</div>';
      setTimeout(function(){ location.reload(true); }, 2500);
    } else {
      $('result').innerHTML = '<div class="alert alert-danger mb-0"><i class="bi bi-x-circle me-2"></i>'+esc(d.erro||'Falha na atualização')+'</div>';
    }
  }).catch(function(e){ $('result').innerHTML = '<div class="alert alert-danger mb-0">'+esc(e.message)+'</div>'; });
}

$('btn-verificar').addEventListener('click', verificar);
$('btn-salvar-url').addEventListener('click', salvarUrl);
})();
</script>
