class Nuntius::Configuration

def add_nuntiable_class(klass)

def add_nuntiable_class(klass)
  @nuntiable_class_names = []
  @nuntiable_classes << klass.to_s unless @nuntiable_classes.include?(klass.to_s)
end

def compile_nuntiable_class_names

def compile_nuntiable_class_names
  names = []
  names << "Custom" if allow_custom_events
  @nuntiable_classes.each do |klass_name|
    klass = klass_name.constantize
    names << klass.name
    names += klass.descendants.map(&:name)
  end
  names.sort!
end

def compile_nuntiable_class_names!

def compile_nuntiable_class_names!
  @nuntiable_class_names = compile_nuntiable_class_names
end

def default_params(event, record)

def default_params(event, record)
  @default_params.is_a?(Proc) ? instance_exec(event, record, &@default_params) : @default_params
end

def flow_color(template_id)

def flow_color(template_id)
  @flow_color.is_a?(Proc) ? instance_exec(template_id, &@flow_color) : @flow_color
end

def initialize

def initialize
  set_defaults!
  @nuntiable_classes = []
  @nuntiable_class_names = []
  @transports = []
  @providers = {}
  @visible_scope = -> { all }
  @add_metadata = -> {}
  @metadata_fields = {}
  @metadata_humanize = ->(data) { data.inspect }
  @default_template_scope = ->(_object) { all }
  @default_params = {}
end

def metadata_humanize(metadata)

Make the part that is important for visible readable for humans
def metadata_humanize(metadata)
  @metadata_humanize.is_a?(Proc) ? instance_exec(metadata, &@metadata_humanize) : @metadata_humanize
end

def nuntiable_class_names

def nuntiable_class_names
  return @nuntiable_class_names if @nuntiable_class_names.present?
  compile_nuntiable_class_names!
end

def provider(provider, transport:, priority: 1, timeout: 0, settings: {})

def provider(provider, transport:, priority: 1, timeout: 0, settings: {})
  if @transports.include? transport
    @providers[transport.to_sym] ||= []
    @providers[transport.to_sym].push(provider: provider, priority: priority, timeout: timeout, settings: settings)
  else
    Nuntius.config.logger.call.warn "provider #{provider} not enabled as transport #{transport} is not enabled"
  end
end

def transport(transport)

def transport(transport)
  @transports.push(transport) if transport
end