var tabla;

function init() {
    listar();

    // Evento para checkbox "Seleccionar todos"
    $("#checkAll").on('change', function () {
        $(".select-item").prop('checked', $(this).prop('checked'));
        actualizarBotonEliminar();
    });

    // Evento para checkboxes individuales
    $(document).on('change', '.select-item', function () {
        actualizarBotonEliminar();
    });

    // Evento para botón eliminar seleccionados
    $("#btnEliminarSeleccionados").on('click', function () {
        eliminarSeleccionados();
    });
}

function listar() {
    tabla = $('#tbllistado').dataTable({
        "aProcessing": true,
        "aServerSide": true,
        ajax: {
            url: '../ajax/solicitud_examen.php?op=listar_historial',
            type: "get",
            dataType: "json",
            error: function (e) {
                console.log(e.responseText);
            }
        },
        "bDestroy": true,
        "iDisplayLength": 10,
        "order": [[1, "desc"]],
        "language": {
            "sProcessing": "Procesando...",
            "sLengthMenu": "Mostrar _MENU_ registros",
            "sZeroRecords": "No se encontraron resultados",
            "sEmptyTable": "Ningún dato disponible en esta tabla",
            "sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros",
            "sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0 registros",
            "sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
            "sInfoPostFix": "",
            "sSearch": "Buscar:",
            "sUrl": "",
            "sInfoThousands": ",",
            "sLoadingRecords": "Cargando...",
            "oPaginate": {
                "sFirst": "Primero",
                "sLast": "Último",
                "sNext": "Siguiente",
                "sPrevious": "Anterior"
            },
            "oAria": {
                "sSortAscending": ": Activar para ordenar la columna de manera ascendente",
                "sSortDescending": ": Activar para ordenar la columna de manera descendente"
            }
        }
    }).DataTable();
}

function verSolicitud(idsolicitud) {
    var url = "../reportes/vista_solicitud_examen.php?idsolicitud=" + idsolicitud;
    window.open(url, '_blank');
}

function eliminar(idsolicitud) {
    bootbox.confirm("¿Está seguro de eliminar esta solicitud?", function (result) {
        if (result) {
            $.post("../ajax/solicitud_examen.php?op=eliminar", { idsolicitud: idsolicitud }, function (data) {
                bootbox.alert(data);
                tabla.ajax.reload();
            });
        }
    });
}

function eliminarSeleccionados() {
    var seleccionados = [];
    $('.select-item:checked').each(function () {
        seleccionados.push($(this).val());
    });

    if (seleccionados.length === 0) {
        bootbox.alert("No ha seleccionado ningún elemento.");
        return;
    }

    bootbox.confirm("¿Está seguro de eliminar " + seleccionados.length + " solicitud(es)?", function (result) {
        if (result) {
            $.ajax({
                url: "../ajax/solicitud_examen.php?op=eliminar_lote",
                type: "POST",
                data: { ids: seleccionados },
                dataType: "json",
                success: function (response) {
                    if (response.success) {
                        bootbox.alert(response.message);
                        tabla.ajax.reload();
                        $("#checkAll").prop('checked', false);
                        actualizarBotonEliminar();
                    } else {
                        bootbox.alert("Error: " + response.message);
                    }
                },
                error: function () {
                    bootbox.alert("Error de comunicación con el servidor.");
                }
            });
        }
    });
}

function actualizarBotonEliminar() {
    var seleccionados = $('.select-item:checked').length;
    if (seleccionados > 0) {
        $("#btnEliminarSeleccionados").show();
    } else {
        $("#btnEliminarSeleccionados").hide();
    }
}

init();
