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

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

// Obtener listas para el buscador (solo admin)
if (!$es_empleado) {
    $empleados = consulta("SELECT id, nombre, apellidos FROM empleados ORDER BY nombre;", [], true);
    $grupos = consulta("SELECT id, nombre FROM grupos ORDER BY nombre;", [], true);
}
?>

<section class="cristal" <?= (!get_config_usuario($_SESSION['id_usuario'], 'reducir_efectos_movimiento')) ? 'style="view-transition-name: cristal;"' : '' ?>>
    <h1 class="resaltado textocentrado"><?= $es_empleado ? 'Mis vacaciones' : 'Solicitudes de vacaciones' ?></h1>

    <?php if ($es_empleado): ?>
        <section class="flex row supercentrado" style="margin-bottom:1rem;">
            <button type="button" class="btn-p" onclick="abrir_dialog_solicitud()">Nueva solicitud</button>
        </section>
    <?php endif; ?>

    <?php
    if (!empty($empleados_check = consulta("SELECT id FROM empleados LIMIT 1;", [], true))):
    ?>
        <!-- Info -->
        <?php if (!$es_empleado): ?>
            <p class="rojo textocentrado" style="margin-bottom:0.5rem;"><b>Al aceptar una solicitud se agregará a días festivos como vacaciones de ese empleado.<br>Si quieres agregar unas vacaciones ya pasadas, puedes agregarla desde <a href="<?= SITIO_CARPETA ?>/views/tables/festivos" class="enlace rojo" style="text-decoration:underline;">festivos</a>.</b></p>
        <?php endif; ?>
        <!-- Filtros de búsqueda -->
        <article class="flex row gap1 supercentrado wrap row-column" style="margin-bottom:1rem;">
            <?php if (!$es_empleado): ?>
                <label class="flex column gap02"><b>Grupo</b>
                    <select name="grupo" id="filtro_grupo">
                        <option value="">Todos los grupos</option>
                        <?php
                        if (!empty($grupos))
                            for ($i = 0; $i < count($grupos); $i++)
                                echo "<option value='" . $grupos[$i]["id"] . "'>" . $grupos[$i]["nombre"] . "</option>";
                        ?>
                    </select>
                </label>
                <label class="flex column gap02"><b>Empleado</b>
                    <input type="search" list="lista_empleados" name="empleado" id="filtro_empleado" placeholder="<?= $mostrar_apellidos ? 'Nombre o apellidos' : 'Buscar empleado' ?>">
                    <datalist id="lista_empleados">
                        <?php
                        if (!empty($empleados))
                            for ($i = 0; $i < count($empleados); $i++) {
                                $nombre_completo = $mostrar_apellidos && !empty($empleados[$i]["apellidos"]) 
                                    ? $empleados[$i]["nombre"] . " " . $empleados[$i]["apellidos"]
                                    : $empleados[$i]["nombre"];
                                echo "<option value='" . htmlspecialchars($nombre_completo) . "'></option>";
                            }
                        ?>
                    </datalist>
                </label>
            <?php endif; ?>
            <label class="flex column gap02"><b>Estado</b>
                <select name="estado" id="filtro_estado">
                    <option value="">Todos los estados</option>
                    <option value="1">Pendiente</option>
                    <option value="2">Aprobada</option>
                    <option value="0">Rechazada</option>
                </select>
            </label>
            <label class="flex column gap02"><b>Desde</b>
                <input type="date" name="fecha_desde" id="filtro_fecha_desde" title="Fecha desde">
            </label>
            <label class="flex column gap02"><b>Hasta</b>
                <input type="date" name="fecha_hasta" id="filtro_fecha_hasta" title="Fecha hasta">
            </label>
            <section class="flex row gap05" style="align-self: flex-end;">
                <button type="button" class="btn-s" onclick="limpiar_filtros()">Limpiar</button>
            </section>
        </article>

        <section id="cargando"></section>
        <section id="solicitudes"></section>
    <?php else: ?>
        <article id="no-hay-datos" class="flex wrap" style="width:fit-content; text-wrap: balance; margin-top: 1rem;">
            <h3>¡Vaya, parece que no tienes empleados! <a class="enlace blanco" href="<?= SITIO_CARPETA ?>/views/forms/empleado">Añadir empleado</a></h3>
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="1em" height="1em"><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"/></svg>
        </article>
    <?php endif; ?>
</section>

<aside id="showdialog"></aside>

<script>
    window.onload = function() {
        cargar_solicitudes();
        <?php if (!$es_empleado): ?>
            document.getElementById('filtro_grupo').addEventListener('change', cargar_solicitudes);
            document.getElementById('filtro_empleado').addEventListener('keyup', cargar_solicitudes);
        <?php endif; ?>
        document.getElementById('filtro_estado').addEventListener('change', cargar_solicitudes);
        document.getElementById('filtro_fecha_desde').addEventListener('change', cargar_solicitudes);
        document.getElementById('filtro_fecha_hasta').addEventListener('change', cargar_solicitudes);
    }

    function cargar_solicitudes() {
        poner_cargando();
        let data = '';
        <?php if (!$es_empleado): ?>
            let grupo = document.getElementById('filtro_grupo').value;
            let empleado = document.getElementById('filtro_empleado').value;
            if (grupo) data += 'grupo=' + grupo;
            if (empleado) data += (data ? '&' : '') + 'empleado=' + encodeURIComponent(empleado);
        <?php endif; ?>
        let estado = document.getElementById('filtro_estado').value;
        let fecha_desde = document.getElementById('filtro_fecha_desde').value;
        let fecha_hasta = document.getElementById('filtro_fecha_hasta').value;
        if (estado !== '') data += (data ? '&' : '') + 'estado=' + estado;
        if (fecha_desde) data += (data ? '&' : '') + 'fecha_desde=' + fecha_desde;
        if (fecha_hasta) data += (data ? '&' : '') + 'fecha_hasta=' + fecha_hasta;

        ajax('tables/table_vacaciones', 'solicitudes', data, ['quitar_cargando()']);
    }

    function limpiar_filtros() {
        <?php if (!$es_empleado): ?>
            document.getElementById('filtro_grupo').value = '';
            document.getElementById('filtro_empleado').value = '';
        <?php endif; ?>
        document.getElementById('filtro_estado').value = '';
        document.getElementById('filtro_fecha_desde').value = '';
        document.getElementById('filtro_fecha_hasta').value = '';
        cargar_solicitudes();
    }

    <?php if ($es_empleado): ?>

        function abrir_dialog_solicitud() {
            ajax('dialogs/dialog_solicitar_vacaciones', 'showdialog', '', ['cargar_dialog()']);
        }

        function enviar_solicitud() {
            let fecha_inicio = document.getElementById('fecha_inicio').value;
            let fecha_fin = document.getElementById('fecha_fin').value;
            let motivo = document.getElementById('motivo').value;

            if (!fecha_inicio || !fecha_fin) {
                crear_notificacion('error', 'Debes seleccionar las fechas');
                return;
            }

            if (fecha_fin < fecha_inicio) {
                crear_notificacion('error', 'La fecha fin debe ser posterior a la fecha inicio');
                return;
            }

            ajax('forms/solicitar_vacaciones', 'notificaciones',
                'fecha_inicio=' + fecha_inicio + '&fecha_fin=' + fecha_fin + '&motivo=' + encodeURIComponent(motivo),
                ['cargar_solicitudes()', 'animacion_y_cierre_dialog()']);
        }

        function cancelar_solicitud(id) {
            if (confirm('¿Estás seguro de cancelar esta solicitud?')) {
                ajax('forms/cancelar_vacaciones', 'notificaciones', 'id=' + id, ['cargar_solicitudes()']);
            }
        }
    <?php else: ?>

        function aprobar_solicitud(id) {
            ajax('forms/gestionar_vacaciones', 'notificaciones', 'id=' + id + '&accion=aprobar', ['cargar_solicitudes()']);
        }

        function rechazar_solicitud(id) {
            ajax('forms/gestionar_vacaciones', 'notificaciones', 'id=' + id + '&accion=rechazar', ['cargar_solicitudes()']);
        }

        function eliminar_vacacion(id) {
            ajax('dialogs/dialog_delete_vacacion', 'showdialog', 'id=' + id, ['cargar_dialog()']);
        }

        function confirmar_eliminar_vacacion(id) {
            ajax('delete/delete_vacacion', 'notificaciones', 'id=' + id, ['animacion_y_cierre_dialog()', 'cargar_solicitudes()']);
        }
    <?php endif; ?>
</script>

<?php footer(true); ?>