<?php
/**
 * Endpoint para subir PDFs firmados con FirmaEC Desktop
 * Organiza los archivos por fecha en carpetas
 */

require_once "../config/Conexion.php";

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    try {
        $idatencion = isset($_POST['idatencion']) ? limpiarCadena($_POST['idatencion']) : '';

        if (empty($idatencion)) {
            throw new Exception('ID de atención no válido');
        }

        // Validar que se haya subido un archivo
        if (!isset($_FILES['pdf_firmado']) || $_FILES['pdf_firmado']['error'] != 0) {
            throw new Exception('No se recibió ningún archivo o hubo un error en la carga');
        }

        $archivo = $_FILES['pdf_firmado'];

        // Validar que sea PDF
        $extension = strtolower(pathinfo($archivo['name'], PATHINFO_EXTENSION));
        if ($extension !== 'pdf') {
            throw new Exception('Solo se permiten archivos PDF');
        }

        // Validar tamaño (máximo 5MB)
        if ($archivo['size'] > 5 * 1024 * 1024) {
            throw new Exception('El archivo es demasiado grande. Máximo 5MB');
        }

        // Crear carpeta por fecha (YYYY/MM/DD)
        $fecha = date('Y/m/d');
        $carpetaDestino = '../files/recetas_firmadas/' . $fecha;

        // Crear directorios si no existen
        if (!file_exists($carpetaDestino)) {
            mkdir($carpetaDestino, 0755, true);
        }

        // Generar nombre único para el archivo
        $nombreArchivo = 'receta_' . $idatencion . '_firmada_' . date('YmdHis') . '.pdf';
        $rutaCompleta = $carpetaDestino . '/' . $nombreArchivo;
        $rutaRelativa = 'files/recetas_firmadas/' . $fecha . '/' . $nombreArchivo;

        // Mover archivo a la carpeta de destino
        if (!move_uploaded_file($archivo['tmp_name'], $rutaCompleta)) {
            throw new Exception('Error al guardar el archivo en el servidor');
        }

        // Verificar que el PDF tenga firma digital (opcional)
        // Esto requeriría una librería adicional para leer firmas PDF

        // Actualizar base de datos
        $fechaFirma = date('Y-m-d H:i:s');
        $sql = "UPDATE receta SET 
                firmado = 1,
                fecha_firma = '$fechaFirma',
                ruta_pdf_firmado = '$rutaRelativa'
                WHERE idatencion = '$idatencion'";

        // --- REGISTRAR EN DOCUMENTO_MEDICO (Para que aparezca en el historial) ---
        $atencionRow = ejecutarConsultaSimpleFila("SELECT idpersona, idempleado FROM atencion WHERE idatencion='$idatencion'");
        if ($atencionRow) {
            $idpersona = $atencionRow['idpersona'];
            $idempleado = $atencionRow['idempleado'];

            // Verificar si ya existe
            $docCheck = ejecutarConsultaSimpleFila("SELECT iddocumento FROM documento_medico WHERE idatencion='$idatencion' AND tipo='receta'");

            if ($docCheck) {
                $iddoc = $docCheck['iddocumento'];
                ejecutarConsulta("UPDATE documento_medico SET ruta_pdf_firmado='$rutaRelativa', firmado=1, fecha_firma='$fechaFirma', estado='emitido' WHERE iddocumento='$iddoc'");
            } else {
                ejecutarConsulta("INSERT INTO documento_medico (idatencion, idpersona, tipo, contenido, ruta_pdf, ruta_pdf_firmado, fecha_emision, fecha_firma, firmado, idempleado, estado)
                                 VALUES ('$idatencion', '$idpersona', 'receta', 'Receta Firmada Externamente', '$rutaRelativa', '$rutaRelativa', '$fechaFirma', '$fechaFirma', 1, '$idempleado', 'emitido')");
            }
        }
        // -------------------------------------------------------------------------

        $resultado = ejecutarConsulta($sql);

        if (!$resultado) {
            // Si falla la BD, eliminar el archivo
            unlink($rutaCompleta);
            throw new Exception('Error al actualizar la base de datos');
        }

        // Registrar en log (opcional)
        error_log("PDF firmado subido - Atención: $idatencion, Archivo: $rutaRelativa");

        echo json_encode([
            'success' => true,
            'message' => 'PDF firmado guardado exitosamente',
            'url' => '../' . $rutaRelativa,
            'fecha_firma' => $fechaFirma,
            'carpeta' => $fecha
        ]);

    } catch (Exception $e) {
        error_log("Error en subir_pdf_firmado.php: " . $e->getMessage());
        echo json_encode([
            'success' => false,
            'message' => $e->getMessage()
        ]);
    }
} else {
    echo json_encode([
        'success' => false,
        'message' => 'Método no permitido'
    ]);
}
?>