class ReeLogger::Config

def build

def build
  to_obj({
    file_path: ENV['LOG_FILE_PATH'],
    file_auto_flush: parse_bool_string(ENV['LOG_FILE_AUTO_FLUSH']),
    levels: {
      file: parse_level(ENV['LOG_LEVEL_FILE']),
      stdout: parse_level(ENV['LOG_LEVEL_STDOUT']),
    },
    rate_limit: {
      interval: get_int_value('LOG_RATE_LIMIT_INTERVAL', RATE_LIMIT_INTERVAL),
      max_count: get_int_value('LOG_RATE_LIMIT_MAX_COUNT', RATE_LIMIT_MAX_COUNT),
    },
    default_filter_words: %w[
      password token credential bearer authorization
    ]
  })
end

def get_int_value(name, default)

def get_int_value(name, default)
  value = ENV[name]
  v = if value.to_s.strip.empty?
    default
  else
    Integer(value)
  end
  if v < 0
    raise ArgumentError, "ENV['#{name}'] should be > 0"
  end
  v
end

def parse_bool_string(bool)

def parse_bool_string(bool)
  return false if is_blank(bool)
  return bool.to_s.downcase == "true"
end

def parse_level(level)

def parse_level(level)
  return if is_blank(level)
  validate_inclusion(level, LEVELS)
  level.to_sym
end