<?php
ini_set('session.gc_maxlifetime', 86400);
session_set_cookie_params(86400);
session_save_path("/home/evolucionamos/public_html/mejora/sessions");
session_start();
if (empty($_SESSION['adm']) || ($_SESSION['role'] != 1 && $_SESSION['role'] != 3)) {
    header("Location: index.php"); exit;
}
require_once '../app/models/votacion.php';
require_once '../app/models/datos.php';
$_datosConf      = (new \app\models\datos())->obtenerDatos();
$_tituloAsamblea = !empty($_datosConf->titulo) ? $_datosConf->titulo : 'RESULTADOS';

$model    = new \app\models\votacion();
$vid      = isset($_GET['vid'])  ? (int)$_GET['vid']         : 0;
$zonaFiltro = isset($_GET['zona']) ? strip_tags($_GET['zona']) : '';

if (!$vid) { header("Location: resultados.php"); exit; }

$votacion = $model->obtener($vid);
if (!$votacion) { header("Location: resultados.php?error=Votación+no+encontrada"); exit; }

// Calcular duración de la votación
$duracionStr = '';
if ($votacion->fecha_apertura && $votacion->fecha_cierre) {
    $seg = strtotime($votacion->fecha_cierre) - strtotime($votacion->fecha_apertura);
    $seg = max(0, $seg);
    $duracionStr = sprintf('%02d:%02d:%02d', floor($seg/3600), floor($seg%3600/60), $seg%60);
} elseif ($votacion->fecha_apertura && $votacion->estado === 'abierta') {
    $seg = time() - strtotime($votacion->fecha_apertura);
    $duracionStr = sprintf('%02d:%02d:%02d', floor($seg/3600), floor($seg%3600/60), $seg%60);
}

// Obtener zonas disponibles
$zonas = $model->zonasVotacion($vid);

// Si no hay filtro de zona y hay múltiples zonas, mostrar la primera
if ($zonaFiltro === '' && count($zonas) > 0) {
    $zonaFiltro = $zonas[0]->zona;
}

// UN SOLO QUERY: resultados por zona (batch, sin N+1)
$resultados = ($zonaFiltro !== '') ? $model->resultadosPorZona($vid, $zonaFiltro) : $model->resultadosVotacion($vid);

// Total votos en la zona seleccionada
$totalVotosZona = array_sum(array_map(function($r){ return $r->total_votos; }, $resultados));

// Censos — UN SOLO QUERY
$censos = $model->censoPorZonas();
$censoZona = isset($censos[$zonaFiltro]) ? $censos[$zonaFiltro] : 0;
$participacionZona = ($censoZona > 0) ? round(($totalVotosZona / $censoZona) * 100, 2) : 0;
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <?php require '../head.php'; ?>
    <style>
        body { background:#f8f9fa !important; background-image:none !important; font-family:'Segoe UI',Tahoma,Verdana,sans-serif; }
        .navbar-enterprise { background:#fff !important; border-bottom:2px solid #17c1e8; padding:12px 0; }
        .card-zona { border:none; border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,0.08); padding:30px; background:#fff; }
        .progress { height:24px; border-radius:15px; background:#eef2f7; margin-top:5px; }
        .progress-bar { font-weight:700; background:#17c1e8 !important; }
        .zona-pill { display:inline-block; padding:6px 16px; border-radius:20px; font-size:.82em; font-weight:700;
                     cursor:pointer; margin:3px; text-decoration:none; border:2px solid #dee2e6; color:#555; transition:.2s; }
        .zona-pill:hover, .zona-pill.active { background:#2b5a9e; color:#fff; border-color:#2b5a9e; text-decoration:none; }
        .rank-num { width:36px; height:36px; border-radius:50%; background:linear-gradient(135deg,#2b5a9e,#17c1e8);
                    color:#fff; font-weight:900; display:inline-flex; align-items:center; justify-content:center; font-size:.9em; }
        .stat-box { background:#f8f9fa; border-radius:12px; padding:15px; text-align:center; border:1px solid #eee; }
        .stat-box .num { font-size:1.8em; font-weight:900; color:#2b5a9e; }
        .stat-box .lbl { font-size:.72em; color:#888; text-transform:uppercase; letter-spacing:.5px; }
    </style>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-enterprise mb-4">
    <div style="max-width:1400px;margin:0 auto;padding:0 28px;width:100%;display:flex;align-items:center;">
        <img src="../assets/images/logo.png" style="height:48px;" alt="Logo">
        <span class="ms-3 fw-bold" style="color:#2b5a9e;font-size:1em;">
            <?php echo htmlspecialchars($_tituloAsamblea); ?>
        </span>
        <div class="ms-auto d-flex gap-2">
            <a href="admin.php" class="btn btn-sm btn-outline-secondary" style="border-radius:8px;font-weight:700;font-size:.8em;">← Panel</a>
            <a href="generar_reporte.php?vid=<?php echo $vid; ?>" target="_blank" class="btn btn-sm btn-dark" style="border-radius:8px;font-weight:700;font-size:.8em;">PDF</a>
            <a href="resultados.php" class="btn btn-sm btn-outline-secondary" style="border-radius:8px;font-weight:700;font-size:.8em;">← Volver</a>
        </div>
    </div>
</nav>

<div class="container">
    <div class="card-zona">

        <!-- Selector de zonas -->
        <?php if (count($zonas) > 1): ?>
            <div class="mb-4">
                <p class="text-muted mb-2" style="font-size:.8em;font-weight:600;">ZONA ELECTORAL:</p>
                <?php foreach ($zonas as $z): ?>
                    <a href="zona.php?vid=<?php echo $vid; ?>&zona=<?php echo urlencode($z->zona); ?>"
                       class="zona-pill <?php echo ($zonaFiltro === $z->zona ? 'active' : ''); ?>">
                        <?php echo htmlspecialchars($z->zona); ?>
                    </a>
                <?php endforeach; ?>
                <a href="zona.php?vid=<?php echo $vid; ?>&zona="
                   class="zona-pill <?php echo ($zonaFiltro === '' ? 'active' : ''); ?>">TODAS</a>
            </div>
        <?php endif; ?>

        <h2 class="text-center mb-1" style="color:#2b5a9e;font-weight:800;text-transform:uppercase;">
            RESULTADOS <?php echo htmlspecialchars($zonaFiltro ?: 'TODAS LAS ZONAS'); ?>
        </h2>
        <p class="text-center mb-4" style="font-size:1.05em;font-weight:700;color:#2b5a9e;"><?php echo htmlspecialchars($votacion->pregunta ?: $votacion->titulo); ?></p>

        <!-- Stats -->
        <div class="row g-3 mb-4">
            <div class="col-6 col-md-3">
                <div class="stat-box">
                    <div class="num" id="zona-total-votos"><?php echo number_format($totalVotosZona,0,',','.'); ?></div>
                    <div class="lbl">Votos Emitidos</div>
                </div>
            </div>
            <div class="col-6 col-md-3">
                <div class="stat-box">
                    <div class="num"><?php echo number_format($censoZona,0,',','.'); ?></div>
                    <div class="lbl">Censo Electoral</div>
                </div>
            </div>
            <div class="col-6 col-md-3">
                <div class="stat-box">
                    <div class="num" id="zona-participacion"><?php echo $participacionZona; ?>%</div>
                    <div class="lbl">Participación</div>
                </div>
            </div>
            <div class="col-6 col-md-3">
                <div class="stat-box">
                    <div class="num"><?php echo count($resultados); ?></div>
                    <div class="lbl">Candidatos</div>
                </div>
            </div>
        </div>

        <hr>

        <!-- Ranking candidatos -->
        <?php if (empty($resultados)): ?>
            <p class="text-center text-muted py-4">No hay votos registrados aún.</p>
        <?php else: ?>
            <?php $rank = 1; foreach ($resultados as $c):
                $pct = ($totalVotosZona > 0) ? round(($c->total_votos / $totalVotosZona) * 100, 2) : 0;
            ?>
                <div class="mb-4">
                    <div class="d-flex justify-content-between align-items-center mb-1">
                        <span class="d-flex align-items-center gap-2">
                            <span class="rank-num"><?php echo $rank; ?></span>
                            <span>
                                <strong style="font-size:1em;color:#17c1e8;"><?php echo htmlspecialchars($c->nombre); ?></strong>
                                <?php if ($c->posicion): ?>
                                    <br><small style="color:#888;font-weight:600;text-transform:uppercase;font-size:.78em;"><?php echo htmlspecialchars($c->posicion); ?></small>
                                <?php endif; ?>
                            </span>
                        </span>
                        <span style="font-size:.9em;">
                            <strong><span id="votos-<?php echo $c->id; ?>"><?php echo number_format($c->total_votos,0,',','.'); ?></span> votos</strong>
                            <small class="text-muted ms-1">(<span id="vpct-<?php echo $c->id; ?>"><?php echo $pct; ?></span>%)</small>
                        </span>
                    </div>
                    <div class="progress">
                        <div class="progress-bar progress-bar-striped progress-bar-animated"
                             id="bar-<?php echo $c->id; ?>"
                             role="progressbar" style="width:<?php echo $pct; ?>%;">
                            <span id="pct-<?php echo $c->id; ?>"><?php echo $pct; ?>%</span>
                        </div>
                    </div>
                </div>
            <?php $rank++; endforeach; ?>
        <?php endif; ?>

        <div class="text-center mt-4">
            <a href="resultados.php" class="btn btn-dark w-100" style="padding:12px;font-weight:700;border-radius:10px;">
                ← VOLVER A VOTACIONES
            </a>
        </div>

    </div>
</div>

<footer class="mt-4 py-3 text-center text-muted" style="font-size:.82em;">
    <p>FYCLS S.A.S — Brújula Virtual | <?php echo date('d/m/Y H:i:s'); ?></p>
</footer>

<!-- Fix 15B: Resultados en tiempo real + keepalive sesión -->
<script>
(function(){
    var VID      = <?php echo (int)$vid; ?>;
    var ZONA     = <?php echo json_encode($zonaFiltro ?: ''); ?>;
    var _timeout = null;

    function poll(){
        fetch('../ajax_resultados_live.php?vid='+VID)
            .then(function(r){ return r.ok ? r.json() : null; })
            .then(function(d){
                if(!d || d.error) return;

                var totalZona = 0;
                // Filtrar candidatos de esta zona
                var cands = d.candidatos.filter(function(c){
                    return ZONA === '' || c.zona === ZONA;
                });
                cands.forEach(function(c){ totalZona += c.total_votos; });

                cands.forEach(function(c){
                    var pct = totalZona > 0 ? Math.round(c.total_votos/totalZona*10000)/100 : 0;
                    var barEl  = document.getElementById('bar-'  + c.id);
                    var pctEl  = document.getElementById('pct-'  + c.id);
                    var vpctEl = document.getElementById('vpct-' + c.id);
                    var votEl  = document.getElementById('votos-'+ c.id);
                    if(barEl)  barEl.style.width = Math.min(pct,100)+'%';
                    if(pctEl)  pctEl.textContent = pct+'%';
                    if(vpctEl) vpctEl.textContent = pct;
                    if(votEl)  votEl.textContent = c.total_votos.toLocaleString('es-CO');
                });

                // Actualizar stats superiores
                var tvEl = document.getElementById('zona-total-votos');
                var ppEl = document.getElementById('zona-participacion');
                if(tvEl) tvEl.textContent = totalZona.toLocaleString('es-CO');
                // participacion relativa al censo de zona
                // (se actualiza solo la cifra de votos; porcentaje
                //  requeriría el censo que ya está calculado en PHP)
            })
            .catch(function(){});
        _timeout = setTimeout(poll, 5000);
    }

    poll();

    // Keepalive: pingar sesión cada 10 minutos para que no expire
    setInterval(function(){
        fetch('keepalive.php').catch(function(){});
    }, 600000);
})();
</script>
</body>
</html>
