<?php
ob_start(); // Iniciar buffer de salida para evitar caracteres extra
// ============================================================
// CONTROLADOR AJAX: bitacora.php
// Descripción: Maneja notas evolutivas y su integración con diagnósticos/recetas
// Fecha: 2026-02-05 - v2 Fixed JSON
// ============================================================

// HABILITAR REPORTING DE ERRORES PARA DEPURACIÓN (TEMPORAL) - Desactivado para producción
error_reporting(0);
ini_set('display_errors', 0);

session_start();
header('Content-Type: application/json'); // Asegurar JSON

require_once __DIR__ . "/../modelos/Bitacora.php";
// require_once __DIR__ . "/../modelos/Resultado.php"; // No se usa la clase, se hacen queries directos y puede causar error

$bitacora = new Bitacora();

// Recibir parámetros comunes
$idatencion = isset($_POST["idatencion"]) ? limpiarCadena($_POST["idatencion"]) : "";
$idpersona = isset($_POST["idpersona"]) ? limpiarCadena($_POST["idpersona"]) : ""; // ID Paciente

// DEBUG LOGGING
$logMsg = date("Y-m-d H:i:s") . " | OP: " . $_GET["op"] . " | AT: " . $idatencion . " | PER: " . $idpersona . "\n";
file_put_contents("debug_log.txt", $logMsg, FILE_APPEND);

switch ($_GET["op"]) {
    case 'guardar':
        if (empty($idatencion) || empty($idpersona)) {
            echo "Error: Datos incompletos (Falta Atención o Paciente)";
            exit;
        }

        $nota = isset($_POST["nota"]) ? limpiarCadena($_POST["nota"]) : "-";
        $cie10_codigo = isset($_POST["cie10_codigo"]) ? limpiarCadena($_POST["cie10_codigo"]) : "";
        $cie10_nombre = isset($_POST["cie10_nombre"]) ? limpiarCadena($_POST["cie10_nombre"]) : "";
        $idusuario = $_SESSION["idusuario"];

        $fecha = date("Y-m-d");
        $hora = date("H:i:s");

        // 1. Guardar la Nota en Bitácora
        $rspta = $bitacora->insertar($idatencion, $idpersona, $nota, $idusuario, $fecha, $hora);

        if ($rspta) {
            $msg_extra = "";

            // 2. INTEGRACIÓN CON RECETA (DIAGNÓSTICOS)
            // Si el médico seleccionó un diagnóstico, lo insertamos en la tabla 'detalle_diagnostico'
            // vinculada a 'resultado' para que salga en la Receta y MSP forms.
            if (!empty($cie10_codigo)) {

                // A. Buscar ID RESULTADO para esta atención
                $sqlRes = "SELECT idresultado FROM resultado WHERE idatencion='$idatencion'";
                $resExisting = ejecutarConsultaSimpleFila($sqlRes);

                $idresultado = 0;

                // B. Si NO existe resultado, creamos uno MINIMO (Header)
                if (!$resExisting) {
                    // Datos mínimos por defecto para compatibilidad
                    $sqlInsertRes = "INSERT INTO resultado (
                        idatencion, fecha, hora, estado, 
                        motivo_consulta, tiempo_enfermedad, antecedentes, examen_fisico, tratamiento, plan, vigencia, tipo_formato
                    ) VALUES (
                        '$idatencion', '$fecha', '$hora', 'Atendido',
                        'Generado desde Bitacora', '-', '-', '-', '-', '-', '3 DIAS', 'BITACORA'
                    )";
                    $idresultado = ejecutarConsulta_retornarID($sqlInsertRes);

                    // Actualizar estado atención
                    ejecutarConsulta("UPDATE atencion set estado='Atendido' WHERE idatencion='$idatencion'");
                } else {
                    $idresultado = $resExisting['idresultado'];
                }

                // C. Insertar Diagnóstico (Si tenemos idresultado válido)
                if ($idresultado > 0) {
                    // Determinar si recibimos un ID (numérico) o un CÓDIGO (string)
                    // El select2 normal devuelve el ID de la tabla.
                    $iddiagnostico_fk = 0;

                    if (is_numeric($cie10_codigo)) {
                        // Es un ID directo
                        $iddiagnostico_fk = $cie10_codigo;
                    } else {
                        // Es un código, buscamos el ID
                        $sqlDiag = "SELECT iddiagnostico FROM diagnostico WHERE codigo='$cie10_codigo'";
                        $resDiag = ejecutarConsultaSimpleFila($sqlDiag);
                        if ($resDiag) {
                            $iddiagnostico_fk = $resDiag['iddiagnostico'];
                        }
                    }

                    if ($iddiagnostico_fk > 0) {

                        // Verificar si ya está asociado para no duplicar en la misma atención
                        $sqlCheck = "SELECT iddetalle_diagnostico FROM detalle_diagnostico WHERE idresultado='$idresultado' AND iddiagnostico='$iddiagnostico_fk'";
                        $check = ejecutarConsultaSimpleFila($sqlCheck);

                        if (!$check) {
                            $sqlInsertDetalle = "INSERT INTO detalle_diagnostico (idresultado, iddiagnostico, tipo) VALUES ('$idresultado', '$iddiagnostico_fk', 'DEFINITIVO')";
                            ejecutarConsulta($sqlInsertDetalle);
                            $msg_extra = " Y diagnóstico vinculado a Receta.";
                        } else {
                            $msg_extra = " (Diagnóstico ya existía en Receta).";
                        }
                    }
                }
            }

            ob_clean(); // Clean buffer before output
            echo json_encode(["status" => "success", "message" => "Nota guardada correctamente." . $msg_extra]);
        } else {
            echo json_encode(["status" => "error", "message" => "No se pudo guardar la nota."]);
        }
        break;

    case 'finalizar_atencion':
        $idatencion = isset($_POST['idatencion']) ? $_POST['idatencion'] : '';
        if (empty($idatencion)) {
            echo json_encode(["status" => false, "msg" => "No ID Atención"]);
            exit;
        }

        // Actualizar estado a Atendido
        $sql = "UPDATE atencion SET estado='Atendido' WHERE idatencion='$idatencion'";
        $rs = ejecutarConsulta($sql); // Assuming ejecutarConsulta is a global function or method of $bitacora

        ob_clean();
        if ($rs) {
            echo json_encode(["status" => true, "msg" => "Atención Finalizada Exitosamente"]);
        } else {
            echo json_encode(["status" => false, "msg" => "Error al finalizar atención"]);
        }
        break;

    case 'verificar_bitacora':
        $idatencion = isset($_POST['idatencion']) ? limpiarCadena($_POST['idatencion']) : '';

        if (empty($idatencion)) {
            echo json_encode(['tiene_bitacora' => false]);
            break;
        }

        $sql = "SELECT COUNT(*) as total FROM bitacora_evolucion WHERE idatencion = '$idatencion'";
        $result = ejecutarConsultaSimpleFila($sql);

        echo json_encode(['tiene_bitacora' => ($result['total'] > 0)]);
        break;

    case 'listar':
        // LOG DETALLADO
        // $logDetalle = "LISTAR - idpersona recibido: '$idpersona' | POST completo: " . print_r($_POST, true) . "\n";
        // file_put_contents("debug_log.txt", $logDetalle, FILE_APPEND);

        if (empty($idpersona)) {
            echo json_encode([]);
            exit;
        }

        $rspta = $bitacora->listarHistorial($idpersona);
        $data = array();

        // VALIDAR SI LA CONSULTA FALLÓ (Posible tabla inexistente)
        if ($rspta === false) {
            // Error SQL fatal
            ob_clean();
            echo json_encode(array("error" => "Error al consultar la base de datos. Posiblemente falta la tabla 'bitacora_evolucion'."));
            exit;
        }

        if ($rspta) {
            while ($reg = $rspta->fetch_object()) {
                $data[] = array(
                    "fecha" => $reg->fecha_evolucion,
                    "hora" => $reg->hora_evolucion,
                    "nota" => $reg->nota,
                    "profesional" => $reg->profesional ? $reg->profesional : "Médico",
                    "idatencion" => $reg->idatencion
                );
            }
        }

        ob_clean(); // LIMPIAR CUALQUIER BASURA PREVIA
        echo json_encode($data);
        break;

    case 'buscar_cie10':
        // Pequeño buscador ligero para el autocompletado de la bitácora
        require_once __DIR__ . "/../modelos/Diagnostico.php";
        $diagnostico = new Diagnostico();
        $texto = isset($_GET['q']) ? $_GET['q'] : '';

        $rspta = $diagnostico->listarDiagnostico($texto);
        $data = array();

        while ($reg = $rspta->fetch_object()) {
            $data[] = array(
                "id" => $reg->iddiagnostico,
                "text" => $reg->nenfermedad
            );
        }
        echo json_encode($data);
        break;
}
