Source: managers/CamerasManager.js

/**
 * @ngdoc managers
 * @name CamerasManager
 * @module s4c.managers.CamerasManager
 *
 * @description
 * `CamerasManager` Componente para comunicação entre uma página html qualquer e o controller da diretiva
 * 
 * 
 */
(function () {
    'use strict';

    function CamerasManager() {
        var self = this;
        return {
            'cameras': [],
            /**
             * @method reagir
             * @param {*} _cameras
             */
            'reagir': _.debounce(function (_cameras) {
                _cameras = _.sample(_cameras, self.cameras.length);
                if (_cameras.length > 0) {
                    _.each(_cameras, function (c) {
                        var numero = c.numero;
                        var nome = c.nome;

                        if (_.findIndex(self.cameras, {
                            numero: numero
                        }) > -1) {
                            return;
                        }

                        var camera = _.find(self.cameras, function (camera) {
                            return !camera.status;
                        });

                        if (!camera) {
                            _.sample(self.cameras).abrirCamera(c.url);
                        } else {
                            camera.abrirCamera(c.url);
                        }
                    });
                }
            }, 800),
            /**
             * @method abrirRandom
             * @param {*} numero 
             */
            'abrirRandom': function (numero) {
                //be careful, here be dragons.
                if (this.cameras.length > 0) {

                    // Camera já está no módulo:
                    if (_.findIndex(this.cameras, {
                        numero: numero
                    })) {
                        return;
                    }

                    var camera = _.find(this.cameras, function (camera) {
                        return !camera.status;
                    });

                    if (!camera) {
                        _.sample(this.cameras).abrirCamera(numero);
                    } else {
                        camera.abrirCamera(numero);
                    }
                }
            }
        };
    }

    angular.module('s4c.managers')
        .service('CamerasManager', CamerasManager);
})();