module.exports = authenticationPlugin

const { Deprecation } = require('deprecation')
const once = require('once')

const deprecateAuthenticate = once((log, deprecation) => log.warn(deprecation))

const authenticate = require('./authenticate')
const beforeRequest = require('./before-request')
const requestError = require('./request-error')

function authenticationPlugin (octokit, options) {
  if (options.auth) {
    octokit.authenticate = () => {
      deprecateAuthenticate(octokit.log, new Deprecation('[@octokit/rest] octokit.authenticate() is deprecated and has no effect when "auth" option is set on Octokit constructor'))
    }
    return
  }
  const state = {
    octokit,
    auth: false
  }
  octokit.authenticate = authenticate.bind(null, state)
  octokit.hook.before('request', beforeRequest.bind(null, state))
  octokit.hook.error('request', requestError.bind(null, state))
}