# == Schema Information
#
# Table name: reporting_events
#
#  id                      :bigint           not null, primary key
#  event_end_time          :datetime
#  event_start_time        :datetime
#  name                    :string
#  value                   :float
#  value_in_business_hours :float
#  created_at              :datetime         not null
#  updated_at              :datetime         not null
#  account_id              :integer
#  conversation_id         :integer
#  inbox_id                :integer
#  user_id                 :integer
#
# Indexes
#
#  index_reporting_events_for_response_distribution  (account_id,name,inbox_id,created_at)
#  index_reporting_events_on_account_id              (account_id)
#  index_reporting_events_on_conversation_id         (conversation_id)
#  index_reporting_events_on_created_at              (created_at)
#  index_reporting_events_on_inbox_id                (inbox_id)
#  index_reporting_events_on_name                    (name)
#  index_reporting_events_on_user_id                 (user_id)
#  reporting_events__account_id__name__created_at    (account_id,name,created_at)
#

class ReportingEvent < ApplicationRecord
  validates :account_id, presence: true
  validates :name, presence: true
  validates :value, presence: true

  belongs_to :account
  belongs_to :user, optional: true
  belongs_to :inbox, optional: true
  belongs_to :conversation, optional: true

  # Scopes for filtering
  scope :filter_by_date_range, lambda { |range|
    where(created_at: range) if range.present?
  }

  scope :filter_by_inbox_id, lambda { |inbox_id|
    where(inbox_id: inbox_id) if inbox_id.present?
  }

  scope :filter_by_user_id, lambda { |user_id|
    where(user_id: user_id) if user_id.present?
  }

  scope :filter_by_name, lambda { |name|
    where(name: name) if name.present?
  }
end
