<?php
/**
 * loginController.php — Sprint 3 + Fix 15D
 *
 * Fix 15D: votoRealizado() (legacy users.voto) se verifica DESPUÉS
 * de la lógica dinámica. Si hay votación abierta, se verifica
 * votacion_participantes para ESA votación específica.
 * Esto evita que un voto en votación N bloquee el acceso a votación N+1.
 */
namespace app\controller;
use app\models\user;
use app\models\votos;
require_once 'app/models/user.php';
require_once 'app/models/votos.php';
require_once 'datos.php';
$login_error_message = '';
if (!empty($_POST['btnLogin'])) {
    $username = trim($_POST['username']);
    $password = trim($_POST['password']);
    if ($username == "") {
        return $login_error_message = '¡El campo de nombre de usuario es obligatorio!';
    }
    if ($password == "") {
        return $login_error_message = '¡El campo de contraseña es obligatorio!';
    }
    $user = new user();
    $datosUsuario = $user->usuario($username, $password);
    if (!$datosUsuario) {
        return $login_error_message = '¡Detalles de acceso incorrectos!';
    }
    if ($datosUsuario->activo != 1) {
        return $login_error_message = $estadoCerrado;
    }
    // Sprint 3 + Fix 15B: Grace window explícita para NULL
    $enQuorum = ($datosUsuario->quorum == 1) ||
                (($datosUsuario->quorum == 0 || $datosUsuario->quorum === null) &&
                 !empty($datosUsuario->fecha_salida) &&
                 strtotime($datosUsuario->fecha_salida) >= time() - (int)(env("GRACE_WINDOW_MINUTES", 5) * 60));
    if (!$enQuorum) {
        $appUrl = rtrim(env('APP_URL', 'https://mejora.evolucionamos.com'), '/');
        return $login_error_message = '<a href="' . $appUrl . '/registro_quorum.php">Regístrese en el quórum aquí</a>';
    }
    // Login exitoso — iniciar sesión segura
    session_start();
    session_regenerate_id(true);
    $_SESSION['user_id'] = $datosUsuario->user_id;
    // Fix 15D: verificar votación dinámica PRIMERO
    // Si hay votación abierta → verificar participación en ESA votación (no users.voto global)
    require_once 'app/models/votacion.php';
    $votacionModel   = new \app\models\votacion();
    $votacionAbierta = $votacionModel->obtenerAbierta();
    if ($votacionAbierta) {
        if (!$votacionModel->usuarioYaVoto($votacionAbierta->id, $datosUsuario->user_id)) {
            // No ha votado en esta votación dinámica → dejar pasar
            header("Location: votacion_activa.php?vid=" . $votacionAbierta->id);
            exit;
        } else {
            // Ya votó en esta votación dinámica específica
            return $login_error_message = $mensajeVotoRealizado;
        }
    }
    // Sin votación dinámica abierta → verificar candidatos legacy PRIMERO
    require_once 'app/models/candidatos.php';
    $_candidatosModel = new \app\models\candidatos();
    $_hayCandidatos   = !empty($_candidatosModel->listaCandidatosZona($datosUsuario->zona));
    if (!$_hayCandidatos) {
        // Sin votación activa de ningún tipo
        return $login_error_message = $estadoCerrado;
    }
    // Hay candidatos legacy → verificar si ya votó
    $votos = new votos();
    $votoRealizado = $votos->votoRealizado($datosUsuario->username);
    if ($votoRealizado) {
        return $login_error_message = $mensajeVotoRealizado;
    }
    header("Location: candidatos.php");
    exit;
}
