<?php

namespace app\controller;

use app\models\candidatos;
use app\models\user;
use app\models\votos;

// Incluimos los modelos con require_once para evitar doble carga
require_once 'app/models/user.php';
require_once 'app/models/candidatos.php';
require_once 'app/models/votos.php';
// Si necesitas la clase 'datos', añade:
// require_once 'app/models/datos.php';

session_start();

if (empty($_SESSION['user_id'])) {
    header("Location: index.php");
    exit;
}

$user = new user();
$usuario = $user->detallesUsuario($_SESSION['user_id']);

if ($usuario->activo != 1) {
    header("Location: index.php");
    exit;
}

$votos = new votos();

// Sprint 3 + Fix 15B: Grace window explícita para NULL
$enQuorum = ($usuario->quorum == 1) ||
            (($usuario->quorum == 0 || $usuario->quorum === null) &&
             !empty($usuario->fecha_salida) &&
             strtotime($usuario->fecha_salida) >= time() - (int)(env("GRACE_WINDOW_MINUTES", 5) * 60));

if (!$enQuorum) {
    header("Location: index.php");
    exit;
}

$votoRealizado = $votos->votoRealizado($usuario->username);

if ($votoRealizado) {
    header("Location: index.php");
    exit;
}

$candidatos = new candidatos();
$listaCandidatosZona = $candidatos->listaCandidatosZona($usuario->zona);

// Si no hay candidatos legacy activos, redirigir a index
// El mensaje se mostrará desde loginController vía $estadoCerrado
if (empty($listaCandidatosZona)) {
    // Verificar también si hay votación dinámica abierta
    require_once 'app/models/votacion.php';
    $_vm = new \app\models\votacion();
    $_va = $_vm->obtenerAbierta();
    if ($_va && !$_vm->usuarioYaVoto($_va->id, $usuario->user_id)) {
        header("Location: votacion_activa.php?vid=" . $_va->id);
        exit;
    }
    // Nada activo — destruir sesión y volver al login
    session_unset();
    session_destroy();
    header("Location: index.php");
    exit;
}
