var tabla;

//Función que se ejecuta al inicio
function init() {
	mostrarform(false);
	listar();

	$("#formulario").on("submit", function (e) {
		guardaryeditar(e);
	});
	$("#sexo").val('F');
	$("#sexo").selectpicker('refresh');
	$("#estado_civil").val('S');
	$("#estado_civil").selectpicker('refresh');
	$("#tipo_documento").val('DNI');
	$("#tipo_documento").selectpicker('refresh');
}

//Función limpiar
function limpiar() {
	$("#apaterno").val("");
	$("#amaterno").val("");
	$("#nombre").val("");
	$("#fecha_nacimiento").val("");
	$("#sexo").val("");
	$("#estado_civil").val("");
	$("#alergia").val("");
	$("#intervenciones_quirurgicas").val("");
	$("#tipo_documento").val("");
	$("#num_documento").val("");
	$("#direccion").val("");
	$("#telefono").val("");
	$("#email").val("");
	$("#ocupacion").val("");
	$("#persona_responsable").val("");
	$("#idpersona").val("");
}

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

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

//Función Listar
function listar() {
	texto = $("#texto").val();
	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/persona.php?op=listar&texto=' + texto,
				type: "get",
				dataType: "json",
				error: function (e) {
					console.log(e.responseText);
				}
			},
			"bDestroy": true,
			"iDisplayLength": 5,//Paginación
			"language": {
				"emptyTable": (typeof window.EMPTY_STATE_PACIENTES !== 'undefined') ? window.EMPTY_STATE_PACIENTES : 'Aún no tienes pacientes.',
				"zeroRecords": (typeof window.ZERO_RECORDS_PACIENTES !== 'undefined') ? window.ZERO_RECORDS_PACIENTES : 'No se encontraron resultados.'
			},
			"order": [[0, "desc"]]//Ordenar (columna,orden)
		}).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/persona.php?op=guardaryeditar",
		type: "POST",
		data: formData,
		contentType: false,
		processData: false,

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

	});
	limpiar();
}

function mostrar(idpersona) {
	$.post("../ajax/persona.php?op=mostrar", { idpersona: idpersona }, function (data, status) {
		data = JSON.parse(data);
		mostrarform(true);

		$("#apaterno").val(data.apaterno);
		$("#amaterno").val(data.amaterno);
		//$("#tipo_documento").selectpicker('refresh');
		$("#nombre").val(data.nombre);
		$("#fecha_nacimiento").val(data.fecha_nacimiento);
		$("#sexo").val(data.sexo);
		$("#sexo").selectpicker('refresh');
		$("#estado_civil").val(data.estado_civil);
		$("#estado_civil").selectpicker('refresh');

		$("#vacunas_completas").val(data.vacunas_completas);
		$("#vacunas_completas").selectpicker('refresh');

		$("#tipo_sangre").val(data.tipo_sangre);
		$("#tipo_sangre").selectpicker('refresh');

		$("#intervenciones_quirurgicas").val(data.intervenciones_quirurgicas);
		$("#alergia").val(data.alergia);


		$("#tipo_documento").val(data.tipo_documento);
		$("#tipo_documento").selectpicker('refresh');
		$("#num_documento").val(data.num_documento);
		$("#direccion").val(data.direccion);
		$("#telefono").val(data.telefono);
		$("#email").val(data.email);
		$("#ocupacion").val(data.ocupacion);
		$("#persona_responsable").val(data.persona_responsable);
		$("#idpersona").val(data.idpersona);
	})
}

function historia(idpersona) {
	$.post("../ajax/atencion.php?op=ListarAtenciones&idp=" + idpersona, function (r) {
		$("#hisotoriac").html(r);
	});

	$("#listadoregistros").hide();
	$("#formularioregistros").hide();
	$("#formulariohistoria").show();
	$("#btnGuardar").prop("disabled", false);
	$("#btnagregar").hide();
	$("#dbuscar").hide();
	$("#btncerrar").show();


}

//Función para eliminar registros
function eliminar(idpersona) {
	bootbox.confirm("¿Está Seguro de eliminar el paciente?", function (result) {
		if (result) {
			$.post("../ajax/persona.php?op=eliminar", { idpersona: idpersona }, function (e) {
				bootbox.alert(e);
				tabla.ajax.reload();
			});
		}
	})
}

// ==========================================
// MÓDULO DE VACUNACIÓN (MODAL CARNET)
// ==========================================
var globalEsquema = [];
var globalVacunasPaciente = [];

function mostrarCarnet(idpersona, fecha_nacimiento) {
	$("#modalCarnet").modal("show");
	$("#vaccine-timeline-modal").html('<div style="text-align:center; padding: 20px;"><i class="fa fa-spinner fa-spin fa-2x"></i><br>Cargando Carnet Digital...</div>');

	// Cargar datos del esquema y vacunas del paciente
	$.post("../ajax/vacuna.php?op=listar_esquema", function (r) {
		globalEsquema = JSON.parse(r);

		$.post("../ajax/vacuna.php?op=listar_vacunas_paciente", { idpersona: idpersona }, function (r2) {
			globalVacunasPaciente = JSON.parse(r2);
			renderTimelineModal(idpersona, fecha_nacimiento);
		});
	});
}

function renderTimelineModal(idpersona, fecha_nacimiento) {
	var container = $("#vaccine-timeline-modal");
	container.html("");

	var hoy = new Date();
	var nac = new Date(fecha_nacimiento);
	var edadMeses = (hoy.getFullYear() - nac.getFullYear()) * 12 + (hoy.getMonth() - nac.getMonth());
	if (hoy.getDate() < nac.getDate()) edadMeses--;

	var grupos = new Map();
	globalEsquema.forEach(function (v) {
		if (!grupos.has(v.edad_etiqueta)) {
			grupos.set(v.edad_etiqueta, {
				edad_meses: v.edad_meses,
				vacunas: []
			});
		}
		grupos.get(v.edad_etiqueta).vacunas.push(v);
	});

	grupos.forEach(function (data, etiqueta) {
		var colorBorde = "#bdc3c7";
		var colorFondo = "#fff";
		var vacunasHTML = "";
		var totalVacunas = data.vacunas.length;
		var vacunasAplicadas = 0;

		data.vacunas.forEach(function (vacuna) {
			var aplicada = globalVacunasPaciente.find(p => p.idesquema == vacuna.idesquema && p.estado == 'aplicada');
			var icon = "fa-circle-o";
			var colorItem = "#7f8c8d";
			var tooltip = "Pendiente";

			if (aplicada) {
				vacunasAplicadas++;
				icon = "fa-check-circle";
				colorItem = "#27ae60";
				tooltip = "Aplicada el " + aplicada.fecha_aplicacion;
			} else {
				if (edadMeses >= vacuna.edad_meses) {
					if (edadMeses > (vacuna.edad_meses + 1)) {
						colorItem = "#c0392b";
						tooltip = "ATRASADA";
					} else {
						colorItem = "#f1c40f";
						tooltip = "Aplicar Ahora";
					}
				}
			}

			vacunasHTML += `<div onclick="registrarVacunaDesdeCarnet(${vacuna.idesquema}, '${vacuna.nombre_vacuna}', ${idpersona}, '${fecha_nacimiento}')" 
                                 style="cursor:pointer; margin-top:5px; font-size:12px; color:${colorItem}; display:flex; align-items:center;"
                                 title="${tooltip}">
                                <i class="fa ${icon}" style="margin-right:5px;"></i> ${vacuna.nombre_vacuna}
                            </div>`;
		});

		if (vacunasAplicadas === totalVacunas) {
			colorBorde = "#27ae60";
			colorFondo = "#eafaf1";
		} else if (vacunasAplicadas > 0) {
			colorBorde = "#f1c40f";
		} else if (edadMeses >= data.edad_meses) {
			if (edadMeses > (data.edad_meses + 2)) {
				colorBorde = "#e74c3c";
				colorFondo = "#fdedec";
			} else {
				colorBorde = "#f39c12";
			}
		}

		var card = `
        <div class="vaccine-node" style="min-width: 160px; background: ${colorFondo}; border: 2px solid ${colorBorde}; border-radius: 10px; padding: 10px; position: relative;">
            <div style="font-weight:bold; color:#2c3e50; text-align:center; border-bottom:1px solid #eee; padding-bottom:5px; margin-bottom:5px;">
                ${etiqueta}
            </div>
            <div style="display:flex; flex-direction:column;">
                ${vacunasHTML}
            </div>
        </div>
        `;
		container.append(card);
	});

	// Calcular Porcentaje
	var totalVacunasGlobal = globalEsquema.length;
	var totalAplicadasGlobal = globalVacunasPaciente.filter(p => p.estado == 'aplicada').length;
	var porcentaje = 0;
	if (totalVacunasGlobal > 0) {
		porcentaje = Math.round((totalAplicadasGlobal / totalVacunasGlobal) * 100);
	}

	var colorEstado = "#e74c3c";
	var textoEstado = porcentaje + "% (Riesgo Alto)";

	if (porcentaje > 80) {
		colorEstado = "#27ae60";
		textoEstado = porcentaje + "% (Protegido)";
	} else if (porcentaje > 50) {
		colorEstado = "#f39c12";
		textoEstado = porcentaje + "% (Parcial)";
	}

	$("#lbl-estado-vacunal-modal").html(textoEstado).css("color", colorEstado);
}

function registrarVacunaDesdeCarnet(idesquema, nombre_vacuna, idpersona, fecha_nacimiento) {
	// Verificar si ya está aplicada
	var yaAplicada = globalVacunasPaciente.find(p => p.idesquema == idesquema && p.estado == 'aplicada');
	if (yaAplicada) {
		bootbox.alert("Esta vacuna ya fue registrada el: " + yaAplicada.fecha_aplicacion);
		return;
	}

	bootbox.prompt({
		title: "Registrar Vacuna (Desde Carnet): " + nombre_vacuna,
		inputType: 'text',
		placeholder: 'Ingrese Lote (Opcional) y/o Observaciones',
		callback: function (result) {
			if (result !== null) {
				var lote = result;
				var fecha = new Date().toISOString().slice(0, 10);

				$.post("../ajax/vacuna.php?op=guardar", {
					idatencion: 0, // 0 Indica registro administrativo sin atención médica
					idpersona: idpersona,
					idesquema: idesquema,
					fecha_aplicacion: fecha,
					lote: lote,
					observacion: 'Registrado desde Carnet Digital'
				}, function (e) {
					bootbox.alert(e);
					// Recargar Datos del Modal
					$.post("../ajax/vacuna.php?op=listar_vacunas_paciente", { idpersona: idpersona }, function (r2) {
						globalVacunasPaciente = JSON.parse(r2);
						renderTimelineModal(idpersona, fecha_nacimiento);
					});
				});
			}
		}
	});
}

init();