module.exports = Octokit

const { request } = require('@octokit/request')
const Hook = require('before-after-hook')

const parseClientOptions = require('./parse-client-options')

function Octokit (plugins, options) {
  options = options || {}
  const hook = new Hook.Collection()
  const log = Object.assign({
    debug: () => {},
    info: () => {},
    warn: console.warn,
    error: console.error
  }, options && options.log)
  const api = {
    hook,
    log,
    request: request.defaults(parseClientOptions(options, log, hook))
  }

  plugins.forEach(pluginFunction => pluginFunction(api, options))

  return api
}