define([

'jquery'

], function ($) {

function InitSelection (decorated, $element, options) {
  if (options.get('debug') && window.console && console.warn) {
    console.warn(
      'Select2: The `initSelection` option has been deprecated in favor' +
      ' of a custom data adapter that overrides the `current` method. ' +
      'This method is now called multiple times instead of a single ' +
      'time when the instance is initialized. Support will be removed ' +
      'for the `initSelection` option in future versions of Select2'
    );
  }

  this.initSelection = options.get('initSelection');
  this._isInitialized = false;

  decorated.call(this, $element, options);
}

InitSelection.prototype.current = function (decorated, callback) {
  var self = this;

  if (this._isInitialized) {
    decorated.call(this, callback);

    return;
  }

  this.initSelection.call(null, this.$element, function (data) {
    self._isInitialized = true;

    if (!$.isArray(data)) {
      data = [data];
    }

    callback(data);
  });
};

return InitSelection;

});