namespace :katello do

namespace :upgrades do
  namespace '4.9' do
    desc "Clean orphaned filter rules that cause Pulp copy errors during content view publishing"
    task :clean_orphaned_filter_rules => ['environment'] do
      module_stream_count = 0
      erratum_count = 0
      package_group_count = 0

      ::Katello::ContentViewModuleStreamFilterRule.all.each do |rule|
        # Delete if rule exists in a CV that does not have the matching module stream in its repositories
        content_view = rule.filter.content_view
        unless ::Katello::ModuleStream.in_repositories(content_view.repositories)&.pluck(:id)&.include?(rule.module_stream_id)
          rule.delete
          module_stream_count += 1
        end
      end
      puts "#{module_stream_count} orphaned content view module stream filter rules were deleted."

      ::Katello::ContentViewErratumFilterRule.all.each do |rule|
        content_view = rule.filter.content_view
        unless ::Katello::Erratum.in_repositories(content_view.repositories)&.pluck(:errata_id)&.include?(rule.errata_id)
          rule.delete
          erratum_count += 1
        end
      end
      puts "#{erratum_count} orphaned content view erratum filter rules were deleted."

      ::Katello::ContentViewPackageGroupFilterRule.all.each do |rule|
        content_view = rule.filter.content_view
        unless ::Katello::PackageGroup.in_repositories(content_view.repositories)&.pluck(:pulp_id)&.include?(rule.uuid)
          rule.delete
          package_group_count += 1
        end
      end
      puts "#{package_group_count} orphaned content view package group filter rules were deleted."
    end
  end
end

end