<?php
// Archivo: ../includes/valida_posiciones.php
// Redirige a posiciones si el usuario tiene personas en plantilla sin código de posición y su rol no está exento

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

// Roles que NO serán bloqueados
$rolesNoBloqueados = ['adminTi', 'contabilidad', 'subdistribuidor', 'capturista'];
$rolUsuario = isset($_SESSION['rol']) ? $_SESSION['rol'] : null;

// Si el usuario no está logueado, no hace nada (deja que la validación de login actúe)
if (!isset($_SESSION['attuid'])) {
    return;
}

// Si el usuario ya está en la vista de posiciones, no redirigir
$esVistaPosiciones = strpos($_SERVER['PHP_SELF'], 'frontend/posiciones/index.php') !== false;
if ($esVistaPosiciones) {
    return;
}

// Si el rol está exento, no redirigir
if ($rolUsuario && in_array($rolUsuario, $rolesNoBloqueados)) {
    return;
}


// Conexión a la base de datos
require_once __DIR__ . '/../../backend/db/conexion.php';

// Validación de posiciones vencidas (fechaCierre anterior a hoy, zona horaria Mérida, Yucatán)
date_default_timezone_set('America/Merida');
$hoy = date('Y-m-d');
$sqlVencidas = "SELECT codigo FROM Posiciones WHERE fechaCierre IS NOT NULL AND fechaCierre <> '' AND fechaCierre < '$hoy'";
$resultVencidas = $conn->query($sqlVencidas);
$codigosVencidos = [];
if ($resultVencidas && $resultVencidas->num_rows > 0) {
    while ($rowV = $resultVencidas->fetch_assoc()) {
        $codigosVencidos[] = $rowV['codigo'];
    }
}

if (!empty($codigosVencidos)) {
    $codigosStr = "'" . implode("','", $codigosVencidos) . "'";
    $sqlPlantilla = "SELECT COUNT(*) AS total FROM Plantilla WHERE posicionCode IN ($codigosStr)";
    $resultPlantilla = $conn->query($sqlPlantilla);
    $rowPlantilla = $resultPlantilla ? $resultPlantilla->fetch_assoc() : null;
    $totalVencidas = $rowPlantilla && $rowPlantilla['total'] > 0;
    if ($totalVencidas) {
        header('Location: ../posiciones/posiciones_temporales_vencidas.php');
        exit;
    }
}

// Consultar si hay personas activas sin código de posición
$sql = "SELECT COUNT(*) AS total FROM Plantilla WHERE ESTATUS = 'ACTIVO' AND (posicionCode IS NULL OR posicionCode = '')";
$result = $conn->query($sql);
$row = $result ? $result->fetch_assoc() : null;
$personasSinCodigo = $row && $row['total'] > 0;

if ($personasSinCodigo) {
    header('Location: ../posiciones/index.php');
    exit;
}
