<?php
/**
 * ajax_resultados_live.php — Sprint 9A
 * Endpoint AJAX para la pantalla de proyección en vivo.
 * Devuelve JSON con resultados actuales de una votación.
 */
session_save_path("/home/evolucionamos/public_html/mejora/sessions");
session_start();
if (empty($_SESSION['adm']) || ($_SESSION['role'] != 1 && $_SESSION['role'] != 3)) {
    http_response_code(403);
    echo json_encode(['error' => 'No autorizado']);
    exit;
}

header('Content-Type: application/json; charset=UTF-8');
header('Cache-Control: no-cache, no-store');
// Fix 15C: tocar sesión antes de cerrarla para renovar timer de GC
$_SESSION['_proy_ts'] = time();
session_write_close(); // liberar lock — mtime actualizado arriba

require_once '../app/models/votacion.php';
require_once '../app/helpers/csrf.php';

$vid = isset($_GET['vid']) ? (int)$_GET['vid'] : 0;
if (!$vid) { echo json_encode(['error' => 'vid requerido']); exit; }

$model    = new \app\models\votacion();
$votacion = $model->obtener($vid);
if (!$votacion) { echo json_encode(['error' => 'Votación no encontrada']); exit; }

$resultados       = $model->resultadosVotacion($vid);
$totalVotos       = $model->totalVotosVotacion($vid);
$participantes    = $model->participantesVotacion($vid);
$censos           = $model->censoPorZonas();
$censoTotal       = $censos['_total'] ?? 0;
$participacion    = ($censoTotal > 0) ? round(($totalVotos / $censoTotal) * 100, 2) : 0;

$candidatosData = [];
foreach ($resultados as $c) {
    $pct = ($totalVotos > 0) ? round(($c->total_votos / $totalVotos) * 100, 2) : 0;
    $candidatosData[] = [
        'id'          => $c->id,
        'numero'      => $c->numero,
        'nombre'      => $c->nombre,
        'posicion'    => $c->posicion ?? '',
        'zona'        => $c->zona ?? '',
        'total_votos' => (int)$c->total_votos,
        'pct'         => $pct,
    ];
}

echo json_encode([
    'votacion'      => [
        'id'             => $votacion->id,
        'titulo'         => $votacion->titulo,
        'pregunta'       => $votacion->pregunta ?? '',
        'estado'         => $votacion->estado,
        'fecha_apertura' => $votacion->fecha_apertura ?? null,
        'fecha_cierre'   => $votacion->fecha_cierre   ?? null,
    ],
    'total_votos'   => $totalVotos,
    'participacion' => $participacion,
    'censo_total'   => $censoTotal,
    'votaron'       => $participantes ? (int)$participantes->votaron : 0,
    'candidatos'    => $candidatosData,
    'timestamp'     => date('H:i:s'),
    'csrf_token'    => generarCSRF(),
], JSON_UNESCAPED_UNICODE);
