var tabla;

//Función que se ejecuta al inicio
function init() {
    var input_varios = document.getElementsByName("imagen_varios")[0];
    var input_eco = document.getElementsByName("imagen_ecografia")[0];
    var input_inv = document.getElementsByName("imagen_exameninvasivo")[0];
    var input_rx = document.getElementsByName("imagen_rayosx")[0];


    if (input_varios) {
        input_varios.addEventListener("change", (event) => handleChange(event, input_varios, document.getElementById('file_varios')), false);
    }
    if (input_eco) {
        input_eco.addEventListener("change", (event) => handleChange(event, input_eco, document.getElementById('file_eco')), false);
    }
    if (input_inv) {
        input_inv.addEventListener("change", (event) => handleChange(event, input_inv, document.getElementById('file_inv')), false);
    }
    if (input_rx) {
        input_rx.addEventListener("change", (event) => handleChange(event, input_rx, document.getElementById('file_rayosx')), false);
    }

    function handleChange(event, input, paragraph) {
        const files = event.target.files;
        const fileName = files[0].name;
        input.style.color = 'rgba(255, 255, 255, )';
        if (paragraph) paragraph.innerText = fileName;
    }

    mostrarform(false);
    listar();

    $("#formulario").on("submit", function (e) {
        guardaryeditar(e);
    });

    // Use event delegation for dynamic forms
    $(document).on("submit", "#formulariop", function (e) {
        editarplan(e);
    });
    $.post("../ajax/atencion.php?op=selectEspecialista", function (r) {
        $("#idempleado").html(r);
        $('#idempleado').selectpicker('refresh');
    });
    $.post("../ajax/atencion.php?op=selectServicio", function (r) {
        $("#idservicio").html(r);
        $('#idservicio').selectpicker('refresh');
    });

    // Format Selector Change
    $("#format-selector").change(function () {
        var formato = $(this).val();
        loadClinicalForm(formato);
    });
    // Listener para Archivos Adjuntos
    $("#archivos_adjuntos_input").change(function () {
        var files = $(this)[0].files;
        var names = "";
        for (var i = 0; i < files.length; i++) {
            names += '<i class="fa fa-file"></i> ' + files[i].name + "<br>";
        }
        $("#lista_archivos_preview").html(names);
    });
} // End init

function loadClinicalForm(formato, callback) {
    $("#clinical-form-container").html('<div class="text-center"><i class="fa fa-spinner fa-spin fa-3x"></i><br>Cargando formato...</div>');

    // We will use a dedicated method in access/atencion.php or similar to fetch the view
    // For now, let's assume we create a route for this.
    $.post("../ajax/atencion.php?op=get_form", { formato: formato }, function (data) {
        $("#clinical-form-container").html(data);
        // Re-initialize any plugins if needed (e.g., datepickers, selectpickers)
        $(".selectpicker").selectpicker('refresh');

        // Execute callback if provided
        if (callback && typeof callback === 'function') {
            callback();
        }
    });
}

//$("#idservicio").change(mostrarValores);

//function mostrarValores()
//{
//datosServicio=document.getElementById('idservicio').value.split('_');
//$("#costo").val(datosServicio[2]);
//}

//Función limpiar
function limpiar() {
    $("#idatencion").val("");
    $("#costo").val("");
    $("#idpaciente").val("");
    $("#paciente").val("");
    $("#documento").val("");

}

//Función mostrar formulario
function mostrarform(flag) {
    limpiar();
    if (flag) {
        $("#listadoregistros").hide();
        $("#formularioregistros").show();
        $("#formularioplan").hide();
        $("#btnGuardar").prop("disabled", false);
        $("#btnagregar").hide();
    } else {
        $("#listadoregistros").show();
        $("#formularioregistros").hide();
        $("#formularioplan").hide();
        $("#btnagregar").show();
    }
}

//Función cancelarform
function cancelarform() {
    limpiar();
    mostrarform(false);
}

//Función Listar
function listar() {
    tabla = $('#tbllistado').dataTable(
        {
            "aProcessing": true,//Activamos el procesamiento del datatables
            "aServerSide": true,//Paginación y filtrado realizados por el servidor
            dom: 'Bfrtip',//Definimos los elementos del control de tabla
            buttons: [
                'copyHtml5',
                'excelHtml5',
                'csvHtml5',
                'pdf'
            ],
            "ajax":
            {
                url: '../ajax/atencion.php?op=listar',
                type: "get",
                dataType: "json",
                error: function (e) {
                    console.log(e.responseText);
                }
            },
            "bDestroy": true,
            "iDisplayLength": 5,
            "language": {
                "emptyTable": (typeof window.EMPTY_STATE_ATENCIONES !== 'undefined') ? window.EMPTY_STATE_ATENCIONES : 'No hay atenciones registradas.',
                "zeroRecords": (typeof window.ZERO_RECORDS_ATENCIONES !== 'undefined') ? window.ZERO_RECORDS_ATENCIONES : 'No se encontraron resultados.'
            }
        }).DataTable();
}

//Función para guardar o editar

function guardaryeditar(e) {
    e.preventDefault(); //No se activará la acción predeterminada del evento
    $("#btnGuardar").prop("disabled", true);
    var formData = new FormData($("#formulario")[0]);

    $.ajax({
        url: "../ajax/atencion.php?op=guardaryeditar",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,

        success: function (datos) {
            bootbox.alert(datos);
            mostrarform(false);
            tabla.ajax.reload();

            var url = "http://www.lawebdelprogramador.com";

            window.onload = function () {
                abrirEnPestana(url);
            }
        }

    });
    limpiar();
}

// Nueva función para guardar y pasar directo a atención (sin triaje)
function guardaryeditarDirecto() {
    event.preventDefault();
    $("#btnGuardarDirecto").prop("disabled", true);
    $("#btnGuardar").prop("disabled", true);

    var formData = new FormData($("#formulario")[0]);
    formData.append('directo_atencion', '1'); // Flag para indicar guardado directo

    $.ajax({
        url: "../ajax/atencion.php?op=guardaryeditar",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,

        success: function (datos) {
            bootbox.alert(datos);
            mostrarform(false);
            tabla.ajax.reload();
        },
        error: function () {
            $("#btnGuardarDirecto").prop("disabled", false);
            $("#btnGuardar").prop("disabled", false);
        }
    });
    limpiar();
}

function mostrar(idatencion) {
    $.post("../ajax/atencion.php?op=mostrar", { idatencion: idatencion }, function (data, status) {
        data = JSON.parse(data);
        mostrarform(true);
        $("#costo").val(data.total);
        $("#idatencion").val(data.idatencion);
        $("#idpaciente").val(data.idpersona);
        $("#paciente").val(data.paciente);
        $("#idservicio").val(data.idservicio);
        $("#idservicio").selectpicker('refresh');
        $("#idempleado").val(data.idempleado);
        $("#idempleado").selectpicker('refresh');


    })
}

//Función para desactivar registros
function anular(idatencion) {
    bootbox.confirm("¿Está Seguro de anular la atención?", function (result) {
        if (result) {
            $.post("../ajax/atencion.php?op=anular", { idatencion: idatencion }, function (e) {
                bootbox.alert(e);
                tabla.ajax.reload();
            });
        }
    })
}

function buscarPaciente() {
    var documento = $("#documento").val();
    $.post("../ajax/persona.php?op=buscar", { documento: documento }, function (data, status) {
        $("#idpaciente").val('');
        $("#paciente").val('');

        if (data == null) {
            //mostrarform(true);
            $("#idpaciente").val('');
            $("#paciente").val('No existe el paciente');
        } else {
            data = JSON.parse(data);
            //mostrarform(true);
            $("#idpaciente").val(data.idpersona);
            $("#paciente").val(data.apaterno + ' ' + data.amaterno + ' ' + data.nombre);
        }

    })
}

function abrirEnPestana(url) {
    $("<a>").attr("href", url).attr("target", "_blank")[0].click();
}


//Declaración de variables necesarias para trabajar con las compras y
//sus detalles
var impuesto = 18;
var cont = 0;
var contr = 1;
var detalles = 0;
var valor = 0;
$("#btnGuardarP").hide();

//Función para guardar o editar
//Función para guardar o editar
function editarplan(e) {
    idatencion = $("#idatencionp").val();
    e.preventDefault(); //No se activará la acción predeterminada del evento
    //$("#btnGuardarP").prop("disabled",true);
    var formData = new FormData($("#formulariop")[0]);

    // --- APPEND ARCHIVOS ADJUNTOS MANUALMENTE ---
    // Porque el input está fuera del form formulariop
    var inputArchivos = $("#archivos_adjuntos_input")[0];
    if (inputArchivos && inputArchivos.files.length > 0) {
        for (var k = 0; k < inputArchivos.files.length; k++) {
            formData.append("archivos_adjuntos[]", inputArchivos.files[k]);
        }
    }

    // CAPTURA DE TESTS PSICOLÓGICOS (Ítem 9 - Psicología)
    var inputPsico = $("#psico_archivos_input")[0];
    if (inputPsico && inputPsico.files.length > 0) {
        for (var k = 0; k < inputPsico.files.length; k++) {
            formData.append("archivos_adjuntos[]", inputPsico.files[k]);
        }
    }
    // --------------------------------------------

    // --- LÓGICA DINÁMICA DE RECOLECCIÓN DE DATOS ---
    var objetoDatos = {};
    // Iteramos sobre todos los campos del formulario #formulariop
    var elementosFormulario = document.getElementById('formulariop').elements;

    for (var i = 0; i < elementosFormulario.length; i++) {
        var elemento = elementosFormulario[i];
        if (elemento.name && !elemento.disabled) {
            // Ignoramos botones y campos sin nombre
            if (elemento.type === 'file') continue;

            // Para checkboxes y radios, solo guardamos si están marcados
            if ((elemento.type === 'checkbox' || elemento.type === 'radio') && !elemento.checked) {
                continue;
            }
            // Agregamos al objeto
            objetoDatos[elemento.name] = elemento.value;
        }
    }
    // Serializamos a JSON
    var jsonDatos = JSON.stringify(objetoDatos);
    // Agregamos al FormData
    formData.append('datos_clinicos', jsonDatos);

    // --- FIX CRITICO: TIPO DE FORMATO ---
    // El selector está fuera del form "formulariop", así que lo agregamos manualmente.
    var tipoFormato = $("#format-selector").val();
    if (tipoFormato && tipoFormato !== "") {
        console.log("Enviando formato explícito: " + tipoFormato);
        formData.append('tipo_formato', tipoFormato);
    } else {
        console.warn("No se detectó formato chequeado en selector, enviando null o default");
    }
    // ------------------------------------

    $.ajax({
        url: "../ajax/resultado.php?op=guardaryeditar",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,

        success: function (datos) {
            bootbox.alert(datos);
            mostrarform(false);
            tabla.ajax.reload();
            // Optional: abrir reportes
            // window.open("../reportes/historia.php?idatencion=" + idatencion, '_blank');
            // window.open("../reportes/receta.php?idatencion=" + idatencion, '_blank');
        }

    });
    limpiarPlan();
}

//Función limpiarPlan
function limpiarPlan() {
    $("#idatencion").val("");
    $("#tiempo_enfermedad").val("");
    $("#antecedentes").val("");
    $("#examen_fisico").val("");
    $("#tratamiento").val("");
    $("#receta").val("");
    $("#proxima_cita").val("");
    $("#motivo_consulta").val("");
    $("#plan").val("");
    $("#texto").val("");
    $("#diagnosticos").html("");
    //$("#estado").val("");
    $(".filas").remove();
    $(".filasr").remove();
    cont = 0;
    contr = 1;
    detalles = 0;
    valor = 0;
    $("#btnGuardarP").hide();

    //Agregamos la receta inicial
    // var fila = '<tr class="filasr" id="filar0">' +
    //     '<td><button type="button" class="btn btn-sm btn-danger" onclick="eliminarReceta(' + contr + ')"><i class="fa fa-trash"></i></button></td>' +
    //     '<td><input type="text" class="control" name="medicamento[]" required=""></td>' +
    //     '<td><input type="text" class="control" name="presentacion[]"></td>' +
    //     '<td><input type="text" class="control" name="dosis[]"></td>' +
    //     '<td><input type="text" class="control" name="duracion[]"></td>' +
    //     '<td><input type="number" class="control" name="cantidad[]"></td>' +
    //     '</tr>';
    // $('#recetas').append(fila);
}

function modificar(idatencion) {

    $("#formularioplan").show();
    $("#listadoregistros").hide();
    $("#formularioregistros").hide();
    //$("#btnGuardar").prop("disabled",false);
    $("#btnagregar").hide();

    $.post("../ajax/resultado.php?op=modificar", { idatencion: idatencion }, function (data, status) {
        data = JSON.parse(data);

        // Determinar formato y cargar vista
        var formato = data.tipo_formato || 'MSP_002'; // Default fallback
        console.log("Formato detectado desde BD: " + formato); // Debug log

        // Actualizar selector visualmente si existe
        if ($("#format-selector").length > 0) {
            $("#format-selector").val(formato);
            $("#format-selector").selectpicker('refresh');
        }

        // Cargar formulario y LUEGO poblar datos
        loadClinicalForm(formato, function () {
            // Callback: Poblar datos una vez el HTML existe

            $("#edad").html(data.edad);
            $("#dni").html(data.num_documento);
            $("#paciente").val(data.paciente);
            $("#especialista").html(data.especialista);
            $("#servicio").html(data.servicio);
            $("#idatencionp").val(data.idatencion);

            // Inyección de datos en Header MSP (patient_header.php)
            if ($("#lbl_paciente").length) $("#lbl_paciente").text(data.paciente);
            if ($("#lbl_documento").length) $("#lbl_documento").text(data.num_documento);
            if ($("#lbl_edad").length) $("#lbl_edad").text(data.edad);
            // HC suele ser el DNI o un campo especifico. Usamos DNI fallback si no viene.
            if ($("#lbl_hc").length) $("#lbl_hc").text(data.num_documento);
            if ($("#lbl_sexo").length) $("#lbl_sexo").text(data.sexo || 'No registrado');
            if ($("#lbl_sangre").length) $("#lbl_sangre").text(data.tipo_sangre || 'No registrado');


            $("#presion_arterial").val(data.presion_arterial);
            $("#temperatura").val(data.temperatura);
            $("#frecuencia_respiratoria").val(data.frecuencia_respiratoria);
            $("#frecuencia_cardiaca").val(data.frecuencia_cardiaca);

            $("#saturacion").val(data.saturacion);
            $("#peso").val(data.peso);
            $("#talla").val(data.talla);
            var imc2 = Number(data.imc);
            $("#imc").val(imc2.toFixed(2));

            $("#idpersona").val(data.idpersona);
            $("#alergia").val(data.alergia);
            $("#intervenciones_quirurgicas").val(data.intervenciones_quirurgicas);
            $("#vacunas_completas").val(data.vacunas_completas);
            // $("#vacunas_completas").selectpicker('refresh'); // Assuming standard select

            $("#idresultado").val(data.idresultado);
            $("#motivo_consulta").val(data.motivo_consulta);
            $("#tiempo_enfermedad").val(data.tiempo_enfermedad);
            $("#antecedentes").val(data.antecedentes);
            $("#examen_fisico").val(data.examen_fisico);
            $("#tratamiento").val(data.tratamiento);
            $("#proxima_cita").val(data.proxima_cita);
            $("#plan").val(data.plan);

            // Imagenes
            var input_varios = document.getElementsByName("imagen_varios")[0];
            var input_eco = document.getElementsByName("imagen_ecografia")[0];
            var input_inv = document.getElementsByName("imagen_exameninvasivo")[0];
            var input_rx = document.getElementsByName("imagen_rayosx")[0];

            if (!data.img_varios.includes('no-image') && input_varios) {
                if (document.getElementById('file_varios'))
                    document.getElementById('file_varios').innerText = getFilenameFromPath(data.img_varios);
                input_varios.style.color = 'rgba(0, 0, 0, 0)';
            }

            if (!data.img_eco.includes('no-image') && input_eco) {
                if (document.getElementById('file_eco'))
                    document.getElementById('file_eco').innerText = getFilenameFromPath(data.img_eco);
                input_eco.style.color = 'rgba(0, 0, 0, 0)';
            }
            if (!data.img_inv.includes('no-image') && input_inv) {
                if (document.getElementById('file_inv'))
                    document.getElementById('file_inv').innerText = getFilenameFromPath(data.img_inv);
                input_inv.style.color = 'rgba(0, 0, 0, 0)';
            }

            if (!data.img_rx.includes('no-image') && input_rx) {
                if (document.getElementById('file_rayosx'))
                    document.getElementById('file_rayosx').innerText = getFilenameFromPath(data.img_rx);
                input_rx.style.color = 'rgba(0, 0, 0, 0)';
            }

            // --- LÓGICA DINÁMICA DE CARGA DE DATOS ---
            // alert("Cargando datos dinámicos..."); // Debug opcional
            if (data.datos_clinicos && data.datos_clinicos !== "") {
                try {
                    var datosClinicos = data.datos_clinicos;
                    if (typeof datosClinicos === 'string') {
                        datosClinicos = JSON.parse(datosClinicos);
                    }

                    // Iteramos y asignamos valores
                    for (var key in datosClinicos) {
                        if (datosClinicos.hasOwnProperty(key)) {
                            var campo = document.getElementsByName(key)[0];
                            if (campo) {
                                if (campo.type === 'radio' || campo.type === 'checkbox') {
                                    // if (campo.value === datosClinicos[key]) campo.checked = true;
                                } else {
                                    $(campo).val(datosClinicos[key]);
                                }
                            }
                        }
                    }
                    $('.selectpicker').selectpicker('refresh');

                } catch (e) {
                    console.error("Error parseando datos_clinicos:", e);
                }
            }
            // ------------------------------------------

            $.post("../ajax/resultado.php?op=detalles&idresultado=" + data.idresultado, function (r) {
                $("#tablabody").html(r);
                $("#btnGuardarP").show();
            });

            // Recetas moved inside callback to ensure table exists
            $.post("../ajax/resultado.php?op=recetas&idatencion=" + idatencion, function (r) {
                $("#tablabodyrecetas").html(r);
            });

            // --- MODO LECTURA ---
            // Si el estado es 'Atendido' o 'Finalizado', bloqueamos la edición
            if (data.estado === 'Atendido' || data.estado === 'Finalizado') {
                activarModoLectura(true);
            } else {
                activarModoLectura(false);
            }

        }); // End loadClinicalForm callback

    });
}

// Función para activar/desactivar modo lectura
function activarModoLectura(activo) {
    if (activo) {
        console.log("Activando modo lectura...");
        // Deshabilitar todos los campos de entrada
        $("#formularioplan input, #formularioplan select, #formularioplan textarea").prop('disabled', true);

        // Asegurarse de que los selectpicker se actualicen visualmente
        $('.selectpicker').prop('disabled', true);
        $('.selectpicker').selectpicker('refresh');

        // Ocultar botones de acción (Guardar, Agregar, Eliminar filas)
        $("#btnGuardarP").hide();
        $("#btnagregar").hide();
        $(".btn-danger").hide(); // Botones de eliminar en tablas
        $("#btn-finalizar-firmar").hide(); // Si existe este ID explícito

        // Mostrar Banner de Advertencia
        if ($("#readonly-banner").length === 0) {
            $("<div id='readonly-banner' class='alert alert-warning text-center' style='margin: 10px; font-weight: bold; font-size: 16px; border: 2px solid #e08e0b;'><i class='fa fa-lock'></i> ATENCIÓN FINALIZADA - MODO LECTURA (No se pueden realizar cambios)</div>").insertBefore("#clinical-form-container");
        }
    } else {
        console.log("Desactivando modo lectura...");
        // Habilitar campos
        $("#formularioplan input, #formularioplan select, #formularioplan textarea").prop('disabled', false);
        $('.selectpicker').prop('disabled', false);
        $('.selectpicker').selectpicker('refresh');

        // Mostrar botones
        $("#btnGuardarP").show();
        $("#btnagregar").show();

        // Quitar banner
        $("#readonly-banner").remove();
    }
}

function getFilenameFromPath(path) {
    // Split the path by the directory separator '/'
    const pathParts = path.split('/');

    // Get the last element of the array, which represents the filename
    const filename = pathParts[pathParts.length - 1];

    return filename;
}

function buscarDiagnostico() {
    var texto = $("#texto").val();
    $.post("../ajax/resultado.php?op=diagnosticos&texto=" + texto, function (r) {

        $("#diagnosticos").html(r);
    });
}

function agregar(iddiagnostico, enfermedad) {
    if (iddiagnostico != "") {
        var fila = '<tr class="filas" id="fila' + cont + '">' +
            '<td><button type="button" class="btn btn-danger" onclick="eliminarDetalle(' + cont + ')"><i class="fa fa-trash"></i></button></td>' +
            '<td><select name="tipo[]"><option value="P">P</option><option value="D">D</option><option value="R">R</option></select></td>' +
            '<td><input type="hidden" name="iddiagnostico[]" value="' + iddiagnostico + '">' + enfermedad + '</td>' +
            '</tr>';
        cont++;
        detalles = detalles + 1;
        $('#detalles').append(fila);
    } else {
        alert("Error al aplicar el diagnóstico, revise los datos.");
    }
    evaluar();
}

function agregarReceta() {
    var fila = '<tr class="filasr" id="filar' + contr + '">' +
        '<td><button type="button" class="btn btn-sm btn-danger" onclick="eliminarReceta(' + contr + ')"><i class="fa fa-trash"></i></button></td>' +
        '<td><input type="text" class="control" name="medicamento[]" required=""></td>' +
        '<td><input type="text" class="control" name="presentacion[]"></td>' +
        '<td><input type="text" class="control" name="dosis[]"></td>' +
        '<td><input type="text" class="control" name="duracion[]"></td>' +
        '<td><input type="number" class="control" name="cantidad[]"></td>' +
        '</tr>';
    contr++;
    $('#recetas').append(fila);
}

function evaluar() {
    if (detalles > 0) {
        $("#btnGuardarP").show();
    } else {
        $("#btnGuardarP").show();
        cont = 0;
    }
}

function eliminarDetalle(indice) {
    $("#fila" + indice).remove();
    detalles = detalles - 1;
    evaluar();
}

function eliminarReceta(indice) {
    $("#filar" + indice).remove();
}

init();