# frozen_string_literal: true

class AddTopicThumbnailInformation < ActiveRecord::Migration[6.0]
  disable_ddl_transaction!

  def up
    # tables are huge ... avoid holding on to large number of locks by doing one at a time
    execute <<~SQL
      ALTER TABLE posts
      ADD COLUMN IF NOT EXISTS image_upload_id bigint
    SQL

    execute <<~SQL
      ALTER TABLE topics
      ADD COLUMN IF NOT EXISTS image_upload_id bigint
    SQL

    execute <<~SQL
      CREATE INDEX CONCURRENTLY IF NOT EXISTS
      index_posts_on_image_upload_id ON posts USING btree (image_upload_id)
    SQL

    execute <<~SQL
      CREATE INDEX CONCURRENTLY IF NOT EXISTS
      index_topics_on_image_upload_id ON topics USING btree (image_upload_id)
    SQL

    ActiveRecord::Base.transaction do
      add_column :theme_modifier_sets, :topic_thumbnail_sizes, :string, array: true

      create_table :topic_thumbnails do |t|
        t.references :upload, null: false
        t.references :optimized_image, null: true
        t.integer :max_width, null: false
        t.integer :max_height, null: false
      end

      add_index :topic_thumbnails,
                %i[upload_id max_width max_height],
                name: :unique_topic_thumbnails,
                unique: true
    end
  end

  def down
    raise IrreversibleMigration
  end
end