'use strict';
define(
    [
        'vent',
        'underscore',
        'backbone',
        'signalR'
    ], function (vent, _, Backbone) {

        _.extend(Backbone.Collection.prototype, {
            bindSignalR: function (bindOptions) {

                var collection = this;
                bindOptions = bindOptions || {};

                var processMessage = function (options) {

                    if (options.action === 'sync') {
                        console.log('sync received, refetching collection');
                        collection.fetch();

                        return;
                    }

                    if (options.action === 'deleted') {
                        collection.remove(new collection.model(options.resource, {parse: true}));

                        return;
                    }

                    var model = new collection.model(options.resource, {parse: true});

                    //updateOnly will prevent the collection from adding a new item
                    if (bindOptions.updateOnly && !collection.get(model.get('id'))) {
                        return;
                    }

                    collection.add(model, {merge: true});
                    console.log(options.action + ': {0}}'.format(options.resource));
                };

                collection.listenTo(vent, 'server:' + collection.url.split('/api/')[1], processMessage);

                return this;
            },

            unbindSignalR: function () {

            }});
    });


