<?php
require_once("../../functions.php");
$pag = basename($_SERVER['PHP_SELF']);
gen_plantilla(true, $pag, false, false, '', false, false);

$es_empleado = $_SESSION['tipo_usuario'] == 'empleado';
$es_admin = $_SESSION['tipo_usuario'] == 'admin';
$mostrar_apellidos = get_config('mostrar_apellidos_tabla');

// Obtener filtros
$filtro_grupo = filter_input(INPUT_POST, 'grupo', FILTER_SANITIZE_NUMBER_INT);
$filtro_empleado = filter_input(INPUT_POST, 'empleado', FILTER_SANITIZE_SPECIAL_CHARS);
$filtro_estado = filter_input(INPUT_POST, 'estado', FILTER_SANITIZE_SPECIAL_CHARS);
$filtro_fecha_desde = filter_input(INPUT_POST, 'fecha_desde', FILTER_SANITIZE_SPECIAL_CHARS);
$filtro_fecha_hasta = filter_input(INPUT_POST, 'fecha_hasta', FILTER_SANITIZE_SPECIAL_CHARS);

// Construir consulta con filtros
$consulta = "SELECT sv.*, e.nombre, e.apellidos 
             FROM solicitudes_vacaciones sv 
             INNER JOIN empleados e ON sv.id_empleado = e.id 
             WHERE 1=1 ";
$params = [];

if ($es_empleado) {
    $consulta .= "AND sv.id_empleado = ? ";
    $params[] = $_SESSION['id_empleado'];
} else {
    if (!empty($filtro_grupo)) {
        $consulta .= "AND e.id_grupo = ? ";
        $params[] = $filtro_grupo;
    }
    if (!empty($filtro_empleado)) {
        // Búsqueda flexible: busca en nombre, apellidos o combinación (maneja NULL y vacíos)
        $consulta .= "AND (e.nombre LIKE ? OR e.apellidos LIKE ? OR TRIM(CONCAT(e.nombre, ' ', IFNULL(e.apellidos, ''))) COLLATE utf8mb4_bin LIKE ? OR TRIM(e.nombre) LIKE ?) ";
        $param_like = '%' . trim($filtro_empleado) . '%';
        $params[] = $param_like;
        $params[] = $param_like;
        $params[] = $param_like;
        $params[] = $param_like;
    }
}

// Filtro de estado (para todos los usuarios)
if ($filtro_estado !== '' && $filtro_estado !== null) {
    $consulta .= "AND sv.estado = ? ";
    $params[] = $filtro_estado;
}

if (!empty($filtro_fecha_desde)) {
    $consulta .= "AND sv.fecha_inicio >= ? ";
    $params[] = $filtro_fecha_desde;
}

if (!empty($filtro_fecha_hasta)) {
    $consulta .= "AND sv.fecha_fin <= ? ";
    $params[] = $filtro_fecha_hasta;
}

$consulta .= "ORDER BY sv.estado DESC, sv.id DESC;";

$resultado = consulta($consulta, $params, true);

if (empty($resultado)) {
    no_hay_nada();
    exit;
}

// Función para obtener el estado en texto
function estado_texto($estado)
{
    switch ($estado) {
        case 0:
            return "<span class='desaprobado'>Rechazada</span>";
        case 1:
            return "<span class='pendiente'>Pendiente</span>";
        case 2:
            return "<span class='aprobado'>Aprobada</span>";
        default:
            return "Desconocido";
    }
}

// Calcular días naturales (incluyendo inicio y fin)
function calcular_dias($id_empleado, $fecha_inicio, $fecha_fin)
{
    $inicio = new DateTime($fecha_inicio);
    $fin = new DateTime($fecha_fin);
    return $inicio->diff($fin)->days + 1;
}

echo "<table>";
echo "<thead><tr>";
if (!$es_empleado) echo "<td>Empleado</td>";
echo "<td>Fecha inicio</td>";
echo "<td>Fecha fin</td>";
echo "<td>Días</td>";
echo "<td>Motivo</td>";
echo "<td>Estado</td>";
if ($es_empleado) {
    echo "<td>Acción</td>";
} elseif ($es_admin) {
    echo "<td>Acción</td>";
}
echo "</tr></thead>";
echo "<tbody>";

for ($i = 0; $i < count($resultado); $i++) {
    $estado = (int)$resultado[$i]['estado'];
    echo "<tr>";

    if (!$es_empleado) {
        $nombre_mostrar = $resultado[$i]["nombre"];
        if ($mostrar_apellidos && !empty($resultado[$i]["apellidos"])) {
            $nombre_mostrar .= " " . $resultado[$i]["apellidos"];
        }
        echo "<td>" . htmlspecialchars($nombre_mostrar) . "</td>";
    }

    echo "<td>" . date("d/m/Y", strtotime($resultado[$i]["fecha_inicio"])) . "</td>";
    echo "<td>" . date("d/m/Y", strtotime($resultado[$i]["fecha_fin"])) . "</td>";
    echo "<td>" . calcular_dias($resultado[$i]["id_empleado"], $resultado[$i]["fecha_inicio"], $resultado[$i]["fecha_fin"]) . "</td>";
    echo "<td>" . (!empty($resultado[$i]["motivo"]) ? htmlspecialchars($resultado[$i]["motivo"]) : "<span class='gris'>-</span>") . "</td>";
    echo "<td>" . estado_texto($estado) . "</td>";

    // Acciones
    if ($es_empleado) {
        // Empleado solo puede cancelar solicitudes pendientes
        if ($estado == 1) {
            echo "<td><button type='button' class='btn-t' onclick='cancelar_solicitud(" . $resultado[$i]["id"] . ")'>Cancelar</button></td>";
        } else {
            echo "<td><span class='gris'>-</span></td>";
        }
    } elseif ($es_admin) {
        echo "<td class='flex row gap05 supercentrado'>";
        if ($estado == 1) {
            echo "<button type='button' class='btn-p' onclick='aprobar_solicitud(" . $resultado[$i]["id"] . ")'>Aprobar</button>";
            echo "<button type='button' class='btn-t' onclick='rechazar_solicitud(" . $resultado[$i]["id"] . ")'>Rechazar</button>";
        }
        echo "<button type='button' class='btn-t' style='color:var(--rojo);' onclick='eliminar_vacacion(" . $resultado[$i]["id"] . ")'>Eliminar</button>";
        echo "</td>";
    }

    echo "</tr>";
}

echo "</tbody></table>";
