fetch('SELECT id, nombre_completo FROM lab_enfermeras WHERE id = ?', [$enfermeraId]); if (!$enf) jsonError('Enfermera no encontrada', 404); if (empty($fullName)) $fullName = $enf['nombre_completo']; // ¿Ya existe un usuario vinculado a esta enfermera? $existente = $db->fetch( 'SELECT id, username FROM admin_users WHERE enfermera_id = ? LIMIT 1', [$enfermeraId] ); if ($existente) { // --- ACTUALIZAR --- // Verificar que el nuevo username no esté en uso por OTRO usuario $conflicto = $db->fetch( 'SELECT id FROM admin_users WHERE username = ? AND id != ?', [$username, $existente['id']] ); if ($conflicto) jsonError("El usuario '$username' ya está en uso por otra cuenta"); $sets = ['username = ?', 'full_name = ?', 'is_active = 1', 'updated_at = NOW()']; $vals = [$username, $fullName]; if (!empty($password)) { if (strlen($password) < 6) jsonError('La contraseña debe tener al menos 6 caracteres'); $sets[] = 'password_hash = ?'; $vals[] = password_hash($password, PASSWORD_DEFAULT); } $vals[] = $existente['id']; $db->execute( 'UPDATE admin_users SET ' . implode(', ', $sets) . ' WHERE id = ?', $vals ); jsonOk(['user_id' => $existente['id']], 'Acceso actualizado correctamente'); } else { // --- CREAR --- if (empty($password)) jsonError('La contraseña es obligatoria para crear el acceso'); if (strlen($password) < 6) jsonError('La contraseña debe tener al menos 6 caracteres'); // Verificar username único $conflicto = $db->fetch('SELECT id FROM admin_users WHERE username = ?', [$username]); if ($conflicto) jsonError("El usuario '$username' ya está en uso"); $hash = password_hash($password, PASSWORD_DEFAULT); $db->execute( "INSERT INTO admin_users (username, password_hash, full_name, role, enfermera_id, is_active, created_at) VALUES (?, ?, ?, 'enfermero', ?, 1, NOW())", [$username, $hash, $fullName, $enfermeraId] ); $userId = $db->lastInsertId(); jsonOk(['user_id' => $userId], 'Acceso creado correctamente'); } } catch (Exception $e) { jsonError($e->getMessage(), 500); }