# frozen_string_literal: true

class WatchedWordGroup < ActiveRecord::Base
  validates :action, presence: true
  validate :watched_words_validation

  has_many :watched_words, dependent: :destroy

  def watched_words_validation
    watched_words.each { |word| errors.merge!(word.errors) }
    errors.add(:watched_words, :empty) if watched_words.empty?
  end

  def create_or_update_members(words, params)
    WatchedWordGroup.transaction do
      self.action = WatchedWord.actions[params[:action_key].to_sym]

      words.each do |word|
        watched_word = WatchedWord.create_or_update_word(params.merge(word: word))
        self.watched_words << watched_word
      end

      self.save!
    end
  end

  def action_log_details
    "#{WatchedWord.actions.key(self.action)} → #{watched_words.pluck(:word).join(", ")}"
  end
end

# == Schema Information
#
# Table name: watched_word_groups
#
#  id         :bigint           not null, primary key
#  action     :integer          not null
#  created_at :datetime         not null
#  updated_at :datetime         not null
#