# frozen_string_literal: true

require 'migration/column_dropper'
require 'badge_posts_view_manager'

class RemoveSuperfluousColumns < ActiveRecord::Migration[5.2]
  DROPPED_COLUMNS ||= {
    user_profiles: %i{
        card_image_badge_id
      },
    categories: %i{
        logo_url
        background_url
        suppress_from_homepage
      },
    groups: %i{
        visible
        public
        alias_level
      },
    theme_fields: %i{target},
    user_stats: %i{first_topic_unread_at},
    topics: %i{
        auto_close_at
        auto_close_user_id
        auto_close_started_at
        auto_close_based_on_last_post
        auto_close_hours
        inappropriate_count
        bookmark_count
        off_topic_count
        illegal_count
        notify_user_count
        last_unread_at
        vote_count
      },
    users: %i{
        email
        email_always
        mailing_list_mode
        email_digests
        email_direct
        email_private_messages
        external_links_in_new_tab
        enable_quoting
        dynamic_favicon
        disable_jump_reply
        edit_history_public
        automatically_unpin_topics
        digest_after_days
        auto_track_topics_after_msecs
        new_topic_duration_minutes
        last_redirected_to_top_at
        auth_token
        auth_token_updated_at
        blocked
        silenced
        trust_level_locked
      },
    user_auth_tokens: %i{legacy},
    user_options: %i{theme_key},
    themes: %i{key},
    email_logs: %i{
        topic_id
        reply_key
        skipped
        skipped_reason
      },
    posts: %i{vote_count}
  }

  def up
    BadgePostsViewManager.drop!

    DROPPED_COLUMNS.each do |table, columns|
      Migration::ColumnDropper.execute_drop(table, columns)
    end

    DB.exec "DROP FUNCTION IF EXISTS first_unread_topic_for(int)"

    BadgePostsViewManager.create!
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end