# Ensure the task is only defined when the main app is loaded. if defined?(Rails) && Rails.application

namespace :foreman_ovirt do
  namespace :db do
    desc "Prevents the destructive core oVirt data migration from being run by marking it as complete."
    task :prevent_core_migration => :environment do
      # The version of the Foreman core migration to skip.
      version_to_skip = 20250414121956
      migration_context = ActiveRecord::Base.connection.migration_context

      all_migrations = migration_context.migrations.map(&:version)
      run_migrations = migration_context.get_all_versions

      # A migration needs to be run if it exists on disk but is not yet marked as run in the database.
      if all_migrations.include?(version_to_skip) && !run_migrations.include?(version_to_skip)
        Rails.logger.info "[foreman_ovirt] Marking core migration #{version_to_skip} (MigrateOvirtResources) as complete to prevent data loss."
        ActiveRecord::SchemaMigration.create!(version: version_to_skip.to_s)
        Rails.logger.info "[foreman_ovirt] Core migration successfully skipped."
      else
        Rails.logger.debug "[foreman_ovirt] Core migration #{version_to_skip} does not need to be skipped (already migrated or not found)."
      end
    end
  end
end

# Enhance the core db:migrate task to run our prevention task first.
if Rake::Task.task_defined?('db:migrate')
  Rake::Task['db:migrate'].enhance(['foreman_ovirt:db:prevent_core_migration'])
end

end