# StaffActionLog stores information about actions that staff members have taken,
# like deleting users, changing site settings, etc.
# Use the StaffActionLogger class to log records to this table.
class StaffActionLog < ActiveRecord::Base
  belongs_to :staff_user,   class_name: 'User'
  belongs_to :target_user,  class_name: 'User'

  validates_presence_of :staff_user_id
  validates_presence_of :action

  def self.actions
    @actions ||= Enum.new(:delete_user, :change_trust_level)
  end

  def self.with_filters(filters)
    query = self
    if filters[:action_name] and action_id = StaffActionLog.actions[filters[:action_name].to_sym]
      query = query.where('action = ?', action_id)
    end
    [:staff_user, :target_user].each do |key|
      if filters[key] and obj_id = User.where(username_lower: filters[key].downcase).pluck(:id)
        query = query.where("#{key.to_s}_id = ?", obj_id)
      end
    end
    query
  end
end

# == Schema Information
#
# Table name: staff_action_logs
#
#  id             :integer          not null, primary key
#  action         :integer          not null
#  staff_user_id  :integer          not null
#  target_user_id :integer
#  details        :text
#  created_at     :datetime         not null
#  updated_at     :datetime         not null
#  context        :string(255)
#  ip_address     :string(255)
#  email          :string(255)
#
# Indexes
#
#  index_staff_action_logs_on_action_and_id          (action,id)
#  index_staff_action_logs_on_staff_user_id_and_id   (staff_user_id,id)
#  index_staff_action_logs_on_target_user_id_and_id  (target_user_id,id)
#