# frozen_string_literal: true

require File.expand_path('app/helpers/database_helper')

class AddStepTextAndMigrateData < ActiveRecord::Migration[6.1]
  include DatabaseHelper

  def up
    create_table :step_texts do |t|
      t.references :step, null: false, index: true, foreign_key: true
      t.string :text

      t.timestamps
    end

    add_gin_index_without_tags :step_texts, :text

    Step.where.not(description: nil).find_in_batches(batch_size: 100) do |steps|
      step_texts = []

      steps.each do |step|
        step_texts << step.step_texts.new(text: step.description)
      end
      StepText.import(step_texts, validate: false)
    end

    Step.joins(:tiny_mce_assets, :step_texts)
        .preload(:tiny_mce_assets, :step_texts).find_each do |step|
      step_text_id = step.step_texts.take.id
      step.tiny_mce_assets.update_all(object_type: 'StepText', object_id: step_text_id)
    end
  end

  def down
    StepText.joins(:tiny_mce_assets)
            .preload(:step, :tiny_mce_assets).find_each do |step_text|
      step_text.tiny_mce_assets.update_all(object_type: 'Step', object_id: step_text.step.id)
    end

    drop_table :step_texts
  end
end