# frozen_string_literal: true

module ScreeningModel
  extend ActiveSupport::Concern

  module ClassMethods
    def actions
      @actions ||= Enum.new(:block, :do_nothing, :allow_admin)
    end

    def default_action(action_key)
      @default_action = action_key
    end

    def df_action
      @default_action || :do_nothing
    end
  end

  included { before_validation :set_default_action }

  def set_default_action
    self.action_type ||= self.class.actions[self.class.df_action]
  end

  def action_name=(arg)
    if arg.nil? || !self.class.actions.has_key?(arg.to_sym)
      raise ArgumentError.new("Invalid action type #{arg}")
    end
    self.action_type = self.class.actions[arg.to_sym]
  end

  def record_match!
    self.match_count += 1
    self.last_match_at = Time.zone.now
    save
  end
end