<?php

require_once "../controladores/consulta.controlador.php";
require_once "../modelos/consulta.modelo.php";
require_once "../controladores/paciente.controlador.php";
require_once "../modelos/paciente.modelo.php";
require_once "../controladores/auditoria.controlador.php";
require_once "../modelos/auditoria.modelo.php";

session_start();
class AjaxConsulta {

    /*=============================================
    NUEVO: SUBIR ARCHIVO DESDE EL HISTORIAL (EDICIÓN)
    =============================================*/
    public $idIngresoEdicion;
    public $idPacienteEdicion;
    public $archivoNuevo;

    public function ajaxSubirArchivoEdicion(){

        $idIngreso = $this->idIngresoEdicion;
        $idPaciente = $this->idPacienteEdicion;
        $archivo = $this->archivoNuevo;

        // 1. Crear directorio si no existe
        $directorio = "../vistas/archivos/pacientes/".$idPaciente;
        if(!file_exists($directorio)){
            mkdir($directorio, 0755, true);
        }

        // 2. Preparar el archivo
        $extension = pathinfo($archivo["name"], PATHINFO_EXTENSION);
        $nombreArchivo = "DOC_ING_".$idIngreso."_REV_".mt_rand(10,999).".".$extension;
        $rutaFinal = $directorio."/".$nombreArchivo;

        if(move_uploaded_file($archivo["tmp_name"], $rutaFinal)){

            // 3. Guardar en Base de Datos
            // Usamos la ruta sin los ".." para que sea válida en las vistas
            $rutaBD = "vistas/archivos/pacientes/".$idPaciente."/".$nombreArchivo;

            $descripcion = "El usuario actualizó/adjuntó un nuevo documento digital al ingreso ID: " . $idIngreso;
            ControladorAuditoria::ctrRegistrarAuditoria("Expediente Digital", "ACTUALIZAR", $descripcion);
            
            $datos = array(
                "id_paciente" => $idPaciente,
                "id_ingreso"  => $idIngreso,
                "tipo"        => "ADJUNTO_EXTRA",
                "ruta"        => $rutaBD
            );

            // Importante: Asegúrate de tener este método en tu controlador de pacientes
            $respuesta = ControladorPaciente::ctrGuardarDocumento($datos);

            echo $respuesta; // Debería devolver "ok"

        } else {
            echo "error";
        }
    }

    /*=============================================
    MOSTRAR HISTORIAL (TU CÓDIGO ACTUAL)
    =============================================*/
    public $idPaciente;
    public function ajaxMostrarHistorialPaciente(){

    $item = "id_paciente";
    $valor = $this->idPaciente;

    // 1. Obtener datos antes de cualquier limpieza de buffer
    $respuesta = ControladorConsulta::ctrMostrarHistorialPaciente1($item, $valor);
    $respuesta1 = ControladorConsulta::ctrMostrarHistorialPaciente($valor);
    $dniPaciente = ControladorPaciente::ctrMostrarDocumentosPaciente($valor, "DNI");

    $historialProcesado = array();

    if($respuesta != null){
        foreach ($respuesta as $key => $value) {
            $adjuntos = array();
            if (isset($value["adjuntos_raw"]) && !empty($value["adjuntos_raw"])) {
                $listaDocs = explode("||", $value["adjuntos_raw"]);
                foreach ($listaDocs as $doc) {
                    $partes = explode(":", $doc);
                    if(count($partes) == 2){
                        $adjuntos[] = array(
                            "tipo" => $partes[0],
                            "ruta" => $partes[1]
                        );
                    }
                }
            }
            $value["adjuntos"] = $adjuntos;
            $historialProcesado[] = $value;
        }
    }

    // 2. Preparar el retorno
    $retorno = array(
        "dni" => ($dniPaciente) ? $dniPaciente["ruta_archivo"] : null,
        "historial" => $historialProcesado
    );

    // 3. AUDITORÍA: Asegúrate de que los modelos estén requeridos en este archivo Ajax
    try {
        $nombreP = (isset($respuesta1[0]["paciente"])) ? $respuesta1[0]["paciente"] : "ID: ".$valor;
        $descripcion = "El usuario visualizó el historial clínico y expedientes digitales del paciente: " . $nombreP;
        
        // Ejecutamos la auditoría
        ControladorAuditoria::ctrRegistrarAuditoria("Historia Clínica", "VISUALIZAR", $descripcion);
    } catch (Exception $e) {
        // Opcional: registrar error de log si la auditoría falla para no romper el Ajax
    }

    // 4. Salida limpia del JSON
    if(ob_get_length()) ob_clean();
    header('Content-Type: application/json'); // Forzar encabezado JSON
    echo json_encode($retorno);
}
}

/*=============================================
BLOQUE DE DISPARADORES (MODIFICAR AQUÍ)
=============================================*/

// 1. DISPARADOR PARA MOSTRAR HISTORIAL
if(isset($_POST["idPaciente"])){
    $historial = new AjaxConsulta();
    $historial -> idPaciente = $_POST["idPaciente"];
    $historial -> ajaxMostrarHistorialPaciente();
}

// 2. NUEVO: DISPARADOR PARA SUBIR ARCHIVO DE EDICIÓN
if(isset($_POST["idIngresoEdicion"])){
    $editar = new AjaxConsulta();
    $editar -> idIngresoEdicion = $_POST["idIngresoEdicion"];
    $editar -> idPacienteEdicion = $_POST["idPacienteEdicion"];
    $editar -> archivoNuevo = $_FILES["archivoNuevo"];
    $editar -> ajaxSubirArchivoEdicion();
}