# == Schema Information
#
# Table name: assignment_policies
#
#  id                       :bigint           not null, primary key
#  assignment_order         :integer          default("round_robin"), not null
#  conversation_priority    :integer          default("earliest_created"), not null
#  description              :text
#  enabled                  :boolean          default(TRUE), not null
#  exclude_older_than_hours :integer          default(168)
#  fair_distribution_limit  :integer          default(100), not null
#  fair_distribution_window :integer          default(3600), not null
#  name                     :string(255)      not null
#  created_at               :datetime         not null
#  updated_at               :datetime         not null
#  account_id               :bigint           not null
#
# Indexes
#
#  index_assignment_policies_on_account_id           (account_id)
#  index_assignment_policies_on_account_id_and_name  (account_id,name) UNIQUE
#  index_assignment_policies_on_enabled              (enabled)
#
class AssignmentPolicy < ApplicationRecord
  DEFAULT_EXCLUDE_OLDER_THAN_HOURS = 168

  belongs_to :account
  has_many :inbox_assignment_policies, dependent: :destroy
  has_many :inboxes, through: :inbox_assignment_policies

  validates :name, presence: true, uniqueness: { scope: :account_id }
  validates :fair_distribution_limit, numericality: { greater_than: 0 }
  validates :fair_distribution_window, numericality: { greater_than: 0 }
  validates :exclude_older_than_hours, numericality: { only_integer: true, greater_than: 0 }, allow_nil: true

  enum conversation_priority: { earliest_created: 0, longest_waiting: 1 }

  enum assignment_order: { round_robin: 0 } unless ChatwootApp.enterprise?
end

AssignmentPolicy.include_mod_with('Concerns::AssignmentPolicy')
