module ZuoraConnect

def self.configuration

def self.configuration
  @configuration ||= Configuration.new
end

def self.configure

def self.configure
  yield(configuration)
  ::Apartment.excluded_models << "Delayed::Job" if configuration.delayed_job
  ::Apartment.excluded_models.concat(configuration.additional_apartment_models) if configuration.additional_apartment_models.class == Array
  return configuration
end

def self.elastic_apm_defaults

def self.elastic_apm_defaults
  defaults = {}
  case Rails.env.to_s
  when 'production'
    defaults = {
      server_url: "https://apm-server.logging.svc.cluster.local:8200",
      secret_token:'afhfkulsahgcanriu2c7n8638w59cb67572YCAFAF38839095253',
      transaction_sample_rate: 0.20,
      capture_body: 'errors'
    }
  when 'staging'
    defaults = {
      server_url: "https://apm-server.logging.svc.cluster.local:8200",
      secret_token:'afhfkulsahgcanriu2c7n8638w59cb67572YCAFAF38839095253',
      transaction_sample_rate: 1.0
    }
  when 'development'
    defaults = {
      server_url: "http://logging.0.ecc.auw2.zuora:8200",
      transaction_sample_rate: 1.0
    }
  when 'test'
    defaults = {
      enabled: false,
      disable_send: true
    }
  end
  defaults.merge!({
    disable_start_message: true,
    pool_size: 1,
    transaction_max_spans: 500,
    ignore_url_patterns: ['^\/admin\/resque.*', '^\/admin\/redis.*', '^\/admin\/peek.*', '^\/peek.*'],
    verify_server_cert: false,
    log_level: Logger::WARN,
    service_version: ENV['Z_APPLICATION_VERSION'].present? ? ENV['Z_APPLICATION_VERSION'] : '0.0.0',
    service_name: ENV['DEIS_APP'].present? ? ENV['DEIS_APP'] : ZuoraConnect.app_name,
    logger: ZuoraObservability::Logger.custom_logger(name: "ElasticAPM", level: Logger::WARN)
  })
  defaults.merge!({disable_send: true}) if defined?(Rails::Console)
  return defaults
end

def self.reset

def self.reset
  @configuration = Configuration.new
end

def app_name

def app_name
  if Rails::VERSION::MAJOR >= 6
    Rails.application.class.module_parent_name
  else
    Rails.application.class.parent_name
  end
end

def logger

def logger
  case Rails.env.to_s
  when 'development'
    Rails.logger
   when 'test'
    Rails.logger
  else
    @logger ||= ZuoraObservability::Logger.custom_logger(name: "Connect", level: Rails.logger.level)
  end
end