function init() {
    // Inicializar Select2 para Pacientes
    $('#idpersona').select2({
        placeholder: 'Busque por nombre o número de documento...',
        minimumInputLength: 1,
        ajax: {
            url: '../ajax/persona.php?op=select_paciente',
            dataType: 'json',
            delay: 250,
            processResults: function (data) {
                return {
                    results: data
                };
            },
            cache: true
        }
    });

    // Inicializar Select2 para Diagnósticos (CIE-10) con selección múltiple
    $('#diagnostico_select').select2({
        placeholder: 'Seleccione diagnósticos (CIE-10)...',
        minimumInputLength: 1,
        ajax: {
            url: '../ajax/diagnostico.php?op=buscar_cie10',
            dataType: 'json',
            delay: 250,
            processResults: function (data) {
                return {
                    results: data
                };
            },
            cache: true
        }
    });
}

function limpiarSeleccion() {
    bootbox.confirm("¿Está seguro de limpiar todos los exámenes seleccionados?", function (result) {
        if (result) {
            $("input[name='examenes[]']").prop('checked', false);
            $("#diagnostico_select").val(null).trigger('change');
            $("#diagnostico_texto").val("");
            $("#motivo_examen").val("");
            $("#medico_refiere").val("");
            $("#fum").val("");
        }
    });
}

function generarAvanzado() {
    var idpersona = $("#idpersona").val();
    if (!idpersona) {
        bootbox.alert("Debe seleccionar un paciente.");
        return;
    }

    var examenesSeleccionados = [];
    $("input[name='examenes[]']:checked").each(function () {
        examenesSeleccionados.push($(this).val());
    });

    if (examenesSeleccionados.length === 0) {
        bootbox.alert("Debe seleccionar al menos un examen.");
        return;
    }

    var dialog = bootbox.dialog({
        message: '<p class="text-center"><i class="fa fa-spin fa-spinner"></i> Generando Orden Avanzada...</p>',
        closeButton: false
    });

    // Preparar contenido JSON robusto
    var contenido = {
        meta: {
            medico_refiere: $("#medico_refiere").val(),
            fum: $("#fum").val(),
            tipo_generador: "AVANZADO"
        },
        diagnostico: {
            codigos: $("#diagnostico_select").val(),
            texto: $("#diagnostico_texto").val()
        },
        indicaciones: $("#motivo_examen").val(),
        lista_examenes: examenesSeleccionados
    };

    $.ajax({
        url: "../ajax/solicitud_examen.php?op=guardar",
        type: "POST",
        data: {
            idpersona: idpersona,
            tipo: "AVANZADO_COMPLETO",
            contenido: JSON.stringify(contenido)
        },
        dataType: "json",
        success: function (response) {
            dialog.modal('hide');
            if (response.success) {
                var idsolicitud = response.idsolicitud;
                // ABRIR VENTANA DE VISTA PREVIA (Nueva vista dedicada para formato avanzado)
                var url = "../reportes/vista_examen_avanzado.php?idsolicitud=" + idsolicitud;
                window.open(url, '_blank');

                bootbox.alert("Orden generada correctamente. Revise la vista previa.");
            } else {
                bootbox.alert("Error al guardar: " + response.message);
            }
        },
        error: function (xhr, status, error) {
            dialog.modal('hide');
            bootbox.alert("Error de comunicación: " + error);
        }
    });
}

init();

// Bindeo del evento submit para evitar recarga de página y colapsables
$(document).ready(function () {
    $("#form_avanzado").on("submit", function (e) {
        e.preventDefault();
        generarAvanzado();
    });

    // Controlador para colapsar categorías
    $(document).on("click", ".category-header", function () {
        $(this).next(".category-body").slideToggle(300);
        $(this).find(".fa-chevron-down, .fa-chevron-up").toggleClass("fa-chevron-down fa-chevron-up");
    });
});
