You are using a wrong Parameter ‘$customer_id’ that is not defined in your code. Check below is updated code. It should be work. replace below code with your function.
function change_role_on_purchase( $order_id, $order ) {
$user_id = $order->get_customer_id();
$user = new WP_User( $user_id );
$purchases = get_user_total_purchased_items( $user_id );
if( $purchases >= 50 && $purchases < 100 && ! in_array( 'bronze_user', $user->roles ) ) {
// Remove role
$user->remove_role( 'subscriber' );
// Add role
$user->add_role( 'bronze_user' );
}
elseif( $purchases >= 100 && $purchases < 200 && ! in_array( 'silver_user', $user->roles ) ) {
// Remove role
$user->remove_role( 'bronze_user' );
// Add role
$user->add_role( 'silver_user' );
}
elseif( $purchases >= 200 && ! in_array( 'gold_user', $user->roles ) ) {
// Remove role
$user->remove_role( 'silver_user' );
// Add role
$user->add_role( 'gold_user' );
}
}