var tabla;

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
        }
    });

    // Evento al seleccionar paciente
    $('#idpersona').on('select2:select', function (e) {
        var data = e.params.data;
        $("#info_paciente").html("<b>Seleccionado:</b> " + data.text);
    });

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

    cambiarTipoCert();
}

function cambiarTipoCert() {
    var tipo = $("#tipo_certificado").val();

    // Ocultar todo
    $(".div-medico").hide();
    $(".div-reposo").hide();
    $(".div-personalizado").hide();

    if (tipo == 'MEDICO') {
        $(".div-medico").show();
    } else if (tipo == 'REPOSO') {
        $(".div-reposo").show(); // Campos de fechas y contingencia
        $(".div-medico").show(); // Diagnosticos tambien
        calcularFechaFin();
    } else if (tipo == 'PERSONALIZADO') {
        $(".div-personalizado").show();
    }
}

function calcularFechaFin() {
    var dias = parseInt($("#dias_reposo").val());
    var fechaInicio = new Date($("#fecha_inicio").val());

    if (isNaN(dias) || dias < 1) dias = 1;

    // Sumar dias (restando 1 porque es inclusivo)
    fechaInicio.setDate(fechaInicio.getDate() + (dias - 1));
    fechaInicio.setMinutes(fechaInicio.getMinutes() + fechaInicio.getTimezoneOffset());

    // Desglosar año, mes, dia para ajustar zona horaria
    var yyyy = fechaInicio.getFullYear();
    var mm = String(fechaInicio.getMonth() + 1).padStart(2, '0'); // Enero es 0
    var dd = String(fechaInicio.getDate()).padStart(2, '0');

    $("#fecha_fin").val(yyyy + '-' + mm + '-' + dd);
}

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

    // Llamar directamente a generar (paso 1), la contraseña se pide despues
    generarYFirmar();
}

// NUEVA LÓGICA: 1. Guardar y 2. Abrir Vista Previa (Donde se firmará)
function generarYFirmar(dummyPassword) {
    // dummyPassword se mantiene por compatibilidad si algo lo llama, pero no se usa aqui.

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

    // DEBUG: Verificar que versión de JS se está ejecutando
    console.log("Generando certificado...");

    // Recolectar datos del form
    var contenido = {};
    var tipo = $("#tipo_certificado").val();

    // Combinar diagnósticos select + texto
    // Usamos .val() porque el ID ya contiene el texto completo (Codigo - Enfermedad)
    var diagSelect = $('#diagnosticos_select').val();
    var diagTexto = $("#diagnosticos_texto").val();
    var diagFinal = "";

    if (diagSelect) {
        // En caso de ser array
        if (Array.isArray(diagSelect)) {
            diagFinal += diagSelect.join("\n") + "\n";
        } else {
            diagFinal += diagSelect + "\n";
        }
    }
    diagFinal += diagTexto;

    if (tipo == 'REPOSO') {
        contenido.dias = $("#dias_reposo").val();
        contenido.fecha_inicio = $("#fecha_inicio").val();
        contenido.fecha_fin = $("#fecha_fin").val();
        contenido.contingencia = $("#contingencia").val();
        // Campos IESS Nuevos
        contenido.lugar_emision = $("#lugar_emision").val();
        contenido.servicio = $("#servicio").val();
        contenido.empresa = $("#empresa").val();
        contenido.puesto_trabajo = $("#puesto_trabajo").val();
        contenido.enfermedad_val = $("#enfermedad_val").val();
        contenido.sintomas = $("#sintomas").val();
        contenido.descripcion = $("#descripcion").val();
        // Diagnostico tambien va aqui
        contenido.diagnosticos_texto = diagFinal;

        // El médico también puede querer poner observaciones extra al pie
        contenido.observaciones = $("#observaciones").val();
    } else if (tipo == 'MEDICO') {
        contenido.observaciones = $("#observaciones").val();
        contenido.diagnosticos_texto = diagFinal;
    } else { // PERSONALIZADO
        contenido.texto_libre = $("#texto_libre").val();
        contenido.observaciones = $("#observaciones").val(); // También capturar observaciones
    }

    // DEBUG TEMPORAL: Confirmar datos antes de enviar
    if (tipo == 'MEDICO' && (!contenido.observaciones || contenido.observaciones.trim() === '')) {
        alert("ADVERTENCIA: Las observaciones están vacías.");
    }
    // Fin Debug

    $.ajax({
        url: "../ajax/certificado.php?op=guardar",
        type: "POST",
        data: {
            idpersona: $("#idpersona").val(),
            tipo: tipo,
            contenido: JSON.stringify(contenido)
        },
        dataType: "json",
        success: function (response) {
            if (response.success) {
                var iddocumento = response.iddocumento;
                dialog.modal('hide');

                // ABRIR VENTANA DE VISTA PREVIA
                var url = "../reportes/vista_certificado.php?iddocumento=" + iddocumento;
                window.open(url, '_blank');

                // Limpiar form
                $("#idpersona").val(null).trigger('change');
                $("#diagnosticos_select").val(null).trigger('change');
                $("#diagnosticos_texto").val("");
                // bootbox.alert("Certificado generado."); // No interrumpir flujo

            } else {
                dialog.modal('hide');
                bootbox.alert('<div class="alert alert-danger">Error al guardar: ' + response.message + '</div>');
            }
        },
        error: function (xhr, status, error) {
            dialog.modal('hide');
            bootbox.alert("Error de comunicación: " + error);
        }
    });
}
// Fin generarYFirmar

function ejecutarFirma(iddocumento, password) {
    var dialog = bootbox.dialog({
        message: '<p class="text-center"><i class="fa fa-spin fa-cog"></i> Estampando Firma Digital...</p>',
        closeButton: false
    });

    $.ajax({
        url: "../ajax/certificado.php?op=firmar",
        type: "POST",
        data: {
            iddocumento: iddocumento,
            password: password
        },
        dataType: "json",
        success: function (response) {
            dialog.modal('hide');
            if (response.success) {
                bootbox.alert({
                    message: '<div class="alert alert-success"><i class="fa fa-check"></i> ' + response.message + '</div>',
                    callback: function () {
                        window.open(response.url, '_blank');
                        // Opcional: Limpiar formulario o recargar
                        location.reload();
                    }
                });
            } else {
                bootbox.alert('<div class="alert alert-danger">Error al firmar: ' + response.message + '</div>');
            }
        },
        error: function (xhr, status, error) {
            dialog.modal('hide');
            bootbox.alert("Error de firma: " + error);
        }
    });
}

init();
