Ankh

'use strict';

module.exports = DecoratingResolver

function DecoratingResolver(targetModel, decoratorModels, kernel) {
    if(!targetModel){
        throw new Error('targetModel is required')
    }
    this.targetModel = targetModel
    this.innerResolver = targetModel.resolver()
    this.decoratorModels = (decoratorModels || [])
    this.kernel = kernel
}
DecoratingResolver.prototype.resolve = function(context, deps){
    var Promise = context.Promise
    var promise = Promise.resolve(this.innerResolver.resolve(context,deps))
    return promise
    .bind(this)
    .then(function(prev){
        return Promise.resolve(this.decoratorModels)
        .bind(this)
        .reduce(function(prev, decorator){
            var decoratorDeps = (deps || {})
            decoratorDeps['@impl'] = prev
            return this.kernel.resolve(decorator.key,decoratorDeps)
        }, prev)
    })
}