@extends('layouts.app')
@section('title','Etapa 11 — Encerrar Contest')
@section('content')
 
<h2>Etapa 11 — Encerrar Contest</h2>
 
@if($contestAtivo)
 
{{-- O que esta etapa FAZ --}}
<div style="background:#e8f5e9;border-radius:var(--radius);padding:1rem 1.25rem;
            margin-bottom:1rem;max-width:650px;font-size:.9rem">
    ✅ <strong>O que esta etapa faz:</strong>
    <ul style="margin:.5rem 0 0;padding-left:1.25rem">
        <li>Move os records atuais para anteriores</li>
        <li>Marca o contest como <strong>Encerrado</strong> (flag=2)</li>
        <li>Cria o próximo contest como <strong>Futuro</strong> (flag=0) com datas calculadas</li>
    </ul>
</div>
 
{{-- O que NÃO faz (migrado para Arquivar) --}}
<div style="background:#f8f9fa;border-radius:var(--radius);padding:1rem 1.25rem;
            margin-bottom:1.25rem;max-width:650px;font-size:.87rem;color:#555;
            border:1px solid #e0e0e0">
    ℹ️ <strong>Backup e limpeza de dados</strong> são feitos pelo botão
    <strong>Arquivar</strong> na tela de
    <a href="{{ route('gestao.contests.index') }}">Gestão de Contests</a>,
    após o encerramento. Os dados permanecem no banco até lá.
</div>
 
{{-- Contest atual --}}
<div style="background:#fff;border-radius:var(--radius);padding:1rem 1.25rem;
            margin-bottom:1rem;max-width:650px;box-shadow:0 2px 8px rgba(0,0,0,.06)">
    <strong>Contest atual:</strong> {{ $contestAtivo->name }}
    &nbsp;|&nbsp; {{ $contestAtivo->start_date->format('d/m/Y') }}
    a {{ $contestAtivo->end_date->format('d/m/Y') }}
</div>
 
{{-- Próximo contest calculado --}}
<div style="background:#e8eef7;border-radius:var(--radius);padding:1rem 1.25rem;
            margin-bottom:1.5rem;max-width:650px;font-size:.88rem">
    <strong>Próximo contest que será criado:</strong><br>
    📅 Início: {{ \Carbon\Carbon::parse($proximo['start_date'])->format('d/m/Y H:i') }}<br>
    📅 Fim: {{ \Carbon\Carbon::parse($proximo['end_date'])->format('d/m/Y H:i') }}<br>
    📅 Limite LOG: {{ \Carbon\Carbon::parse($proximo['limit_log'])->format('d/m/Y') }}
    <span style="font-size:.78rem;color:#555;display:block;margin-top:.3rem">
        3º sábado de julho — calculado automaticamente. Poderá ser ajustado em Gestão de Contests.
    </span>
</div>
 
<div id="bloco-inicial">
    <form id="form-encerrar" method="POST" action="{{ route('processamento.encerrar.processar') }}">
        @csrf
        <button type="button" id="btn-executar" class="btn btn-primary"
                onclick="confirmarEExecutar()">
            ✅ Confirmar e Encerrar Contest
        </button>
    </form>
</div>
 
@else
<div class="alert alert-danger">Nenhum contest ativo encontrado.</div>
@endif
 
{{-- Progresso --}}
<div id="bloco-progresso" style="display:none;max-width:650px;margin-top:1.5rem">
    <div id="prog-arquivo" style="font-size:.82rem;color:var(--muted);margin-bottom:.5rem;
         background:#f8f9fa;border-radius:4px;padding:.3rem .7rem;font-family:monospace;
         min-height:1.4em">Aguardando...</div>
    <div style="display:flex;justify-content:space-between;margin-bottom:.3rem">
        <span id="prog-label" style="font-weight:600;font-size:.9rem">Iniciando...</span>
        <span id="prog-pct" style="font-weight:700;color:var(--blue)">0%</span>
    </div>
    <div style="background:#e9ecef;border-radius:50px;height:22px;overflow:hidden;margin-bottom:.5rem">
        <div id="prog-bar" style="height:100%;width:0%;
             background:linear-gradient(90deg,var(--blue),#1976D2);
             border-radius:50px;transition:width .4s ease"></div>
    </div>
    <div id="prog-log" style="background:#1e1e1e;color:#d4d4d4;border-radius:6px;
         padding:.75rem 1rem;font-family:monospace;font-size:.8rem;line-height:1.6;
         max-height:200px;overflow-y:auto;margin-top:.5rem"></div>
</div>
 
{{-- Resultado --}}
<div id="bloco-resultado" style="display:none;max-width:650px;margin-top:1.5rem">
    <div style="background:#dff0d8;border-radius:var(--radius);padding:1rem 1.25rem;margin-bottom:1rem">
        ✅ <strong>Contest encerrado com sucesso!</strong>
    </div>
    <div id="res-detalhes" style="background:#fff;border-radius:var(--radius);
         padding:1rem 1.25rem;box-shadow:0 2px 8px rgba(0,0,0,.06);font-size:.88rem;
         line-height:1.8"></div>
    <div style="margin-top:1rem;display:flex;gap:.75rem">
        <a href="{{ route('gestao.contests.index') }}" class="btn btn-primary">
            🗂️ Ir para Gestão de Contests
        </a>
        <a href="{{ route('dashboard') }}" class="btn btn-secondary">← Dashboard</a>
    </div>
</div>
 
<script>
function confirmarEExecutar() {
    if (!confirm(
        'Confirma o encerramento do contest?\n\n' +
        'Esta ação irá:\n' +
        '• Mover records atuais para anteriores\n' +
        '• Marcar o contest como Encerrado (flag=2)\n' +
        '• Criar o próximo contest como Futuro (flag=0)\n\n' +
        'Os dados permanecem no banco.\n' +
        'Use "Arquivar" em Gestão de Contests para fazer backup e limpar.'
    )) return;
 
    document.getElementById('bloco-inicial').style.display  = 'none';
    document.getElementById('bloco-progresso').style.display= 'block';
 
    fetch('{{ route("processamento.encerrar.processar") }}', {
        method: 'POST',
        headers: {
            'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
            'Content-Type': 'application/json',
            'Accept':       'application/json',
        },
    })
    .then(r => r.json())
    .then(d => {
        if (!d.ok) {
            document.getElementById('prog-label').textContent = '❌ Erro: ' + (d.erro || 'Falha desconhecida');
        }
    })
    .catch(e => {
        document.getElementById('prog-label').textContent = '❌ Erro de comunicação: ' + e.message;
    });
 
    // Polling
    const polling = setInterval(function() {
        fetch('{{ route("processamento.encerrar.progresso") }}', {cache:'no-store'})
            .then(r => r.json())
            .then(d => {
                renderLog(d.progresso || []);
                const pct = d.total > 0 ? Math.round((d.atual / d.total) * 100) : 0;
                document.getElementById('prog-bar').style.width    = pct + '%';
                document.getElementById('prog-pct').textContent    = pct + '%';
                document.getElementById('prog-label').textContent  =
                    'Executando passo ' + d.atual + ' de ' + d.total + '...';
 
                if (d.concluido) {
                    clearInterval(polling);
                    document.getElementById('prog-bar').style.background =
                        'linear-gradient(90deg,#2E7D32,#43A047)';
                    if (d.resultado) {
                        const r = d.resultado;
                        document.getElementById('res-detalhes').innerHTML =
                            '<b>Próximo contest:</b> ' + r.proximo.start_date + '<br>' +
                            '<b>Tempo:</b> ' + r.tempo + '<br>' +
                            '<span style="color:#888;font-size:.82rem">' +
                            'Para fazer backup e liberar o banco, use o botão <b>Arquivar</b> ' +
                            'em Gestão de Contests quando estiver pronto.' +
                            '</span>';
                        document.getElementById('bloco-progresso').style.display = 'none';
                        document.getElementById('bloco-resultado').style.display = 'block';
                    }
                }
            });
    }, 800);
}
 
function renderLog(linhas) {
    const el = document.getElementById('prog-log');
    el.innerHTML = '';
    const cls = {ok:'color:#4ec9b0',info:'color:#ce9178',erro:'color:#f44336',arq:'color:#9cdcfe'};
    (linhas||[]).forEach(function(l) {
        const d = document.createElement('div');
        d.style.cssText = cls[l.tipo] || '';
        d.textContent = l.msg;
        el.appendChild(d);
    });
    el.scrollTop = el.scrollHeight;
}
</script>
@endsection