'use strict'

const Constitutor = require('../constitutors/base')
const Singleton = require('../constitutors/singleton')

/**
 * Constitute decorator for classes.
 */
module.exports = function Dependencies (constitutor0) {
  let constitutor
  if (constitutor0 instanceof Constitutor) {
    constitutor = constitutor0
  } else {
    const dependencies = Array.prototype.slice.call(arguments)
    constitutor = Singleton.create(dependencies)
  }
  return function (Class) {
    Class.constitute = constitutor
  }
}