<?php
function guardar_archivo_movimiento($campo, $subcarpeta, $soloImagen = false)
{
    if (empty($_FILES[$campo]['name']) || $_FILES[$campo]['error'] === UPLOAD_ERR_NO_FILE) return null;
    if ($_FILES[$campo]['error'] !== UPLOAD_ERR_OK) throw new RuntimeException('No se pudo cargar el archivo.');
    if ($_FILES[$campo]['size'] > 10 * 1024 * 1024) throw new RuntimeException('El archivo supera el límite de 10 MB.');
    $extension = strtolower(pathinfo($_FILES[$campo]['name'], PATHINFO_EXTENSION));
    $permitidas = $soloImagen ? ['jpg','jpeg','png','webp'] : ['pdf','doc','docx','xls','xlsx','jpg','jpeg','png','webp','txt'];
    if (!in_array($extension, $permitidas, true)) throw new RuntimeException('Tipo de archivo no permitido.');
    $directorio = __DIR__ . '/../../uploads/' . $subcarpeta;
    if (!is_dir($directorio) && !mkdir($directorio, 0775, true)) throw new RuntimeException('No se pudo preparar el directorio.');
    $nombre = bin2hex(random_bytes(16)) . '.' . $extension;
    if (!move_uploaded_file($_FILES[$campo]['tmp_name'], $directorio . '/' . $nombre)) throw new RuntimeException('No se pudo guardar el archivo.');
    return '/HM/uploads/' . $subcarpeta . '/' . $nombre;
}
