Remove free hidden product dynamically if not match cart rule condition

Dynamically remove free hidden products if they do not match cart rule conditions.

add_action('woocommerce_before_cart', function(){
    if(class_exists('FlycartWooDiscountRulesCartRules')){
        if(empty(FlycartWooDiscountRulesCartRules::$applied_coupon)){
            if(!empty(WC()->cart)){
                $cart_items = WC()->cart->get_cart();
                foreach ($cart_items as $key => $cart_item){
                    $not_visible = false;
                    $product = $cart_item['data'];
                    if(method_exists($product, 'is_visible')){
                        if(!$product->is_visible()){
                            $not_visible = true;
                        }
                    } else if(method_exists($product, 'variation_is_visible')){
                        if(!$product->variation_is_visible()){
                            $not_visible = true;
                        }
                    }
                    if($not_visible){
                        WC()->cart->remove_cart_item( $key );
                    }
                }
            }
        }
    }
}, 1000);