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

// Solo admin puede gestionar vacaciones
if ($_SESSION['tipo_usuario'] != 'admin') {
    crear_notificacion('error', 'No tienes permisos para realizar esta acción');
    exit;
}

$id = filter_input(INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT);
$accion = filter_input(INPUT_POST, 'accion', FILTER_SANITIZE_SPECIAL_CHARS);

if (empty($id) || empty($accion)) {
    crear_notificacion('error', 'Faltan parámetros');
    exit;
}

// Verificar que la solicitud existe y está pendiente
$solicitud = consulta(
    "SELECT sv.*, e.nombre FROM solicitudes_vacaciones sv 
     INNER JOIN empleados e ON sv.id_empleado = e.id 
     WHERE sv.id = ? AND sv.estado = 1;",
    [$id],
    true
);

if (empty($solicitud)) {
    crear_notificacion('error', 'La solicitud no existe o ya fue procesada');
    exit;
}

// Determinar nuevo estado
$nuevo_estado = ($accion == 'aprobar') ? 2 : 0;
$accion_texto = ($accion == 'aprobar') ? 'aprobada' : 'rechazada';

// Actualizar solicitud
$resultado = consulta(
    "UPDATE solicitudes_vacaciones SET estado = ? WHERE id = ?;",
    [$nuevo_estado, $id],
    false
);

if ($resultado) {
    // Si se aprueba, añadir a dias_inhabiles
    if ($accion == 'aprobar') {
        $id_empleado = $solicitud[0]['id_empleado'];
        $fecha_inicio = $solicitud[0]['fecha_inicio'];
        $fecha_fin = $solicitud[0]['fecha_fin'];

        // Insertar en dias_inhabiles (id_motivo = 3 para vacaciones)
        $resultado_festivo = consulta(
            "INSERT INTO `dias_inhabiles`(`id_grupo`, `id_empleado`, `id_motivo`, `fecha_entrada`, `fecha_termina`) 
             VALUES (NULL, ?, 3, ?, ?);",
            [$id_empleado, $fecha_inicio, $fecha_fin],
            false
        );

        if ($resultado_festivo) {
            crear_log(
                'info',
                'Vacaciones añadidas a días inhábiles',
                $pag,
                "Se han añadido las vacaciones del empleado ID:$id_empleado del $fecha_inicio al $fecha_fin"
            );
        } else {
            crear_log(
                'error',
                'Error al añadir días inhábiles',
                $pag,
                "No se pudieron añadir las vacaciones del empleado ID:$id_empleado a días inhábiles"
            );
        }
    }

    crear_log(
        'info',
        'Solicitud de vacaciones ' . $accion_texto,
        $pag,
        "La solicitud ID:$id del empleado " . $solicitud[0]['nombre'] . " ha sido $accion_texto"
    );
    crear_notificacion('correcto', 'Solicitud ' . $accion_texto . ' correctamente');
} else {
    crear_log('error', 'Error al gestionar vacaciones', $pag, "No se pudo actualizar la solicitud ID:$id");
    crear_notificacion('error', 'Error al procesar la solicitud');
}
