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

$tipo = $_SESSION['tipo_usuario'];
$estado = trim(filter_input(INPUT_POST, 'estado', FILTER_SANITIZE_SPECIAL_CHARS)) ?? 'pendiente';
$busqueda = filter_input(INPUT_POST, 'busqueda', FILTER_SANITIZE_SPECIAL_CHARS);
$fecha_inicio = filter_input(INPUT_POST, 'fecha_inicio', FILTER_SANITIZE_SPECIAL_CHARS);
$fecha_fin = filter_input(INPUT_POST, 'fecha_fin', FILTER_SANITIZE_SPECIAL_CHARS);
$mostrar_apellidos = get_config('mostrar_apellidos_tabla');

// Construir consulta con filtros
$where = "WHERE amr.estado = ?";
$params = [$estado];

// Si es empleado, solo ver sus propias solicitudes
if ($tipo == 'empleado') {
    $where .= " AND amr.id_empleado = ?";
    $params[] = $_SESSION['id_empleado'];
}

// Filtros solo para admin
if ($tipo != 'empleado') {
    if (!empty($busqueda)) {
        $where .= " AND (e.nombre LIKE ? OR e.apellidos LIKE ? OR CONCAT(e.nombre, ' ', e.apellidos) LIKE ?)";
        $busqueda_like = '%' . $busqueda . '%';
        $params[] = $busqueda_like;
        $params[] = $busqueda_like;
        $params[] = $busqueda_like;
    }
    if (!empty($fecha_inicio)) {
        $where .= " AND r.fecha >= ?";
        $params[] = $fecha_inicio;
    }
    if (!empty($fecha_fin)) {
        $where .= " AND r.fecha <= ?";
        $params[] = $fecha_fin;
    }
}

$aprobaciones = consulta(
    "SELECT amr.*, r.fecha AS r_fecha, e.nombre, e.apellidos FROM aprobaciones_modificaciones_registros AS amr
    LEFT JOIN empleados AS e ON e.id=amr.id_empleado
    LEFT JOIN registros AS r ON r.id=amr.id_registro
    $where ORDER BY amr.id DESC, amr.id_registro DESC, amr.fecha DESC;",
    $params,
    true
);

if (empty($aprobaciones)) { ?>
    <section class="flex supercentrado" style="width: 100%;">
        <?php no_hay_nada(); ?>
    </section>
    <?php
    exit;
}

//Calcular cuantas entradas/salidas hay para no imprimir toda la tabla
$nivel = 1;
for ($i = 0; $i < count($aprobaciones); $i++) {
    if ($nivel < 2 && !empty($aprobaciones[$i]['h3_original']) && $aprobaciones[$i]['h3_original'] !== '00:00:00')
        $nivel = 2;
    if ($nivel < 3 && !empty($aprobaciones[$i]['h5_original']) && $aprobaciones[$i]['h5_original'] !== '00:00:00')
        $nivel = 3;
    if ($nivel < 4 && !empty($aprobaciones[$i]['h7_original']) && $aprobaciones[$i]['h7_original'] !== '00:00:00')
        $nivel = 4;
    if (!empty($aprobaciones[$i]['h9_original']) && $aprobaciones[$i]['h9_original'] !== '00:00:00') {
        $nivel = 5;
        break;
    }
}
echo "<table>";
if ($estado != 'pendiente') {
    imprEncabezadoTablaAprobaciones($nivel, 1);
} else {
    imprEncabezadoTablaAprobaciones($nivel, 0);
}

for ($i = 0; $i < count($aprobaciones); $i++) {
    echo "<tr>";
    if ($tipo != 'empleado') {
        $nombre_mostrar = $aprobaciones[$i]["nombre"];
        if ($mostrar_apellidos && !empty($aprobaciones[$i]["apellidos"])) {
            $nombre_mostrar .= " " . $aprobaciones[$i]["apellidos"];
        }
        echo "<td style='text-align:start;'>" . htmlspecialchars($nombre_mostrar) . "</td>";
    }
    echo "<td>" . date("d/m/Y", strtotime($aprobaciones[$i]["r_fecha"])) . "</td>";
    for ($o = 1; $o <= 10; $o++) {
        if ($o == 3 && $nivel == 1)
            break;
        if ($o == 5 && $nivel == 2)
            break;
        if ($o == 7 && $nivel == 3)
            break;
        if ($o == 9 && $nivel == 4)
            break;
        $hora = DateTime::createFromFormat('H:i:s', $aprobaciones[$i]["h" . $o . "_original"]);
        $hora_mod = DateTime::createFromFormat('H:i:s', $aprobaciones[$i]["h" . $o . "_modificada"]);

        if ($aprobaciones[$i]["tipo"] == 'eliminar')
            echo '<td><b class="rojo">' . ($hora && $aprobaciones[$i]["h" . $o . "_original"] != '00:00:00' ? $hora->format('H:i') : '') . '</b></td>';
        elseif ($aprobaciones[$i]["tipo"] == 'crear')
            echo '<td><b class="verde">' . ($hora ? $hora->format('H:i') : '') . '</b></td>';
        elseif ($aprobaciones[$i]["tipo"] == 'modificar' && !empty($aprobaciones[$i]["h" . $o . "_original"]) && $aprobaciones[$i]["h" . $o . "_original"] != '00:00:00') {

            if ($hora_mod && $hora->format('H:i') != $hora_mod->format('H:i')) {
                echo "<td><span class='flex row gap02'>" .
                    '<b class="rojo">' . $hora->format('H:i') . '</b>' .
                    '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640">
                        <defs>
                            <linearGradient id="fill-grad" x1="0" y1="0" x2="640" y2="0" gradientUnits="userSpaceOnUse">
                                <stop offset="0%" stop-color="var(--rojo)"/>
                                <stop offset="60%" stop-color="var(--azul)"/>
                                <stop offset="80%" stop-color="var(--verde)"/>
                            </linearGradient>
                        </defs>
                        <path d="M598.6 297.4C611.1 309.9 611.1 330.2 598.6 342.7L470.6 470.7C461.4 479.9 447.7 482.6 435.7 477.6C423.7 472.6 416 460.9 416 448L416 384L80 384C53.5 384 32 362.5 32 336L32 304C32 277.5 53.5 256 80 256L416 256L416 192C416 179.1 423.8 167.4 435.8 162.4C447.8 157.4 461.5 160.2 470.7 169.3L598.7 297.3z"
                                fill="url(#fill-grad)"/>
                    </svg>' .
                    '<b class="verde">' . ($hora_mod ? $hora_mod->format('H:i') : '-') . '</b>' .
                    '</span></td>';
            } else
                echo '<td><span class="cursiva">' . $hora->format('H:i') . '</span></td>';
        } elseif ($aprobaciones[$i]["tipo"] == 'modificar' && empty($aprobaciones[$i]["h" . $o . "_original"]) && !empty($aprobaciones[$i]["h" . $o . "_modificada"])) {
            echo '<td><b class="verde">' . ($hora_mod ? $hora_mod->format('H:i') : '') . '</b></td>';
        } else
            echo "<td class='movilno'></td>";
    }
    echo "<td><span class='tipo-aprobacion-" . $aprobaciones[$i]["tipo"] . "'>" . $aprobaciones[$i]["tipo"] . "</span></td>";
    if ($estado == 'pendiente') {
        //Aprobado?
        echo '<td>';
        if ($tipo == 'admin' || $tipo == 'inspector') {
            echo '<span class="' . $aprobaciones[$i]["estado"] . '">' . $aprobaciones[$i]["estado"] . '</span>';
        } elseif ($tipo == 'empleado') {
            echo '<button class="btn-t" onclick="llamar_dialog_aprobar(' . $aprobaciones[$i]["id"] . ',0)">Declinar</button>';
        }
        echo '</td>';
        if ($tipo == 'empleado') {
            echo '<td><button class="btn-p" onclick="llamar_dialog_aprobar(' . $aprobaciones[$i]["id"] . ',1)">Aprobar</button></td>';
        }
    } elseif ($tipo == 'admin' || $tipo == 'inspector') {
        echo '<td>
        <span class="' . $aprobaciones[$i]["estado"] . '">' . $aprobaciones[$i]["estado"] . '</span>
        </td>';
    }
}
