class Pronto::Config

def bitbucket_hostname

def bitbucket_hostname
  URI.parse(bitbucket_web_endpoint).host
end

def consolidate_comments?

def consolidate_comments?
  consolidated =
    ENV['PRONTO_CONSOLIDATE_COMMENTS'] ||
    @config_hash.fetch('consolidate_comments', false)
  consolidated
end

def default_commit

def default_commit
  default_commit =
    ENV['PRONTO_DEFAULT_COMMIT'] ||
    @config_hash.fetch('default_commit', 'master')
  default_commit
end

def env_key(key)

def env_key(key)
  "PRONTO_#{key.upcase}"
end

def excluded_files(runner)

def excluded_files(runner)
  files =
    if runner == 'all'
      ENV['PRONTO_EXCLUDE'] || @config_hash['all']['exclude']
    else
      @config_hash.fetch(runner, {})['exclude']
    end
  Array(files)
    .flat_map { |path| Dir[path.to_s] }
    .map { |path| File.expand_path(path) }
end

def fetch_integer(key)

def fetch_integer(key)
  full_key = env_key(key)
  (ENV[full_key] && Integer(ENV[full_key])) || @config_hash[key]
end

def fetch_list(key)

def fetch_list(key)
  Array(fetch_value(key)).flat_map do |runners|
    runners.split(',')
  end
end

def fetch_value(key)

def fetch_value(key)
  ENV[env_key(key)] || @config_hash[key]
end

def github_hostname

def github_hostname
  URI.parse(github_web_endpoint).host
end

def github_review_type

def github_review_type
  review_type =
    ENV['PRONTO_GITHUB_REVIEW_TYPE'] ||
    @config_hash.fetch('github_review_type', false)
  if review_type == 'request_changes'
    'REQUEST_CHANGES'
  else
    'COMMENT'
  end
end

def initialize(config_hash = ConfigFile.new.to_h)

def initialize(config_hash = ConfigFile.new.to_h)
  @config_hash = config_hash
end

def logger

def logger
  @logger ||= begin
    verbose = fetch_value('verbose')
    verbose ? Logger.new($stdout) : Logger.silent
  end
end

def max_warnings

def max_warnings
  fetch_integer('max_warnings')
end

def message_format(formatter)

def message_format(formatter)
  formatter_config = @config_hash[formatter]
  if formatter_config && formatter_config.key?('format')
    formatter_config['format']
  else
    fetch_value('format')
  end
end

def runners

def runners
  fetch_list('runners')
end

def skip_runners

def skip_runners
  fetch_list('skip_runners')
end

def warnings_per_review

def warnings_per_review
  fetch_integer('warnings_per_review')
end