/* global BufferedProxy: true */
export function bufferedProperty(property) {
  const mixin = {
    buffered: function() {
      return Em.ObjectProxy.extend(BufferedProxy).create({
        content: this.get(property)
      });
    }.property(property),

    rollbackBuffer: function() {
      this.get('buffered').discardBufferedChanges();
    },

    commitBuffer: function() {
      this.get('buffered').applyBufferedChanges();
    }
  };

  // It's a good idea to null out fields when declaring objects
  mixin.property = null;

  return Ember.Mixin.create(mixin);
}

export default bufferedProperty('content');
