'use strict';

angular.module('copay.controllerUtils')
  .factory('controllerUtils', function($rootScope, $sce, $location, Socket, video) {
    var root = {};
    $rootScope.videoSrc = {};
    $rootScope.getVideoURL = function(copayer) {
      return decodeURIComponent($rootScope.videoSrc[copayer]);
    };

    root.logout = function() {
      console.log('### DELETING WALLET'); //TODO
      $rootScope.wallet = null;
      delete $rootScope['wallet'];
      $rootScope.totalBalance = 0;
      $location.path('signin');
    };

    root.onError = function(scope) {
      if (scope) scope.loading = false;
      $rootScope.flashMessage = {
        type: 'error',
        message: 'Could not connect to peer: ' +
          scope
      };
      root.logout();
    }

    root.onErrorDigest = function(scope) {
      root.onError(scope);
      $rootScope.$digest();
    }
    root.setupUxHandlers = function(w) {
      var handlePeerVideo = function(err, peerID, url) {
        if (err) {
          root.onErrorDigest(err);
        }
        $sce.trustAsResourceUrl(url);
        $rootScope.videoSrc[peerID] = encodeURIComponent(url);
        $rootScope.$apply();
      };
      w.on('badMessage', function(peerId) {
        $rootScope.flashMessage = {
          type: 'error',
          message: 'Received wrong message from peer id:' + peerId
        };
      });

      w.on('created', function(selfpeer) {
        video.setOwnPeer(selfpeer, handlePeerVideo);
        $location.path('peer');
        $rootScope.wallet = w;
        root.updateBalance();
      });
      w.on('refresh', function() {
        console.log('[controllerUtils.js] Refreshing'); //TODO
        root.updateBalance();
      });
      w.on('openError', root.onErrorDigest);
      w.on('peer', function(peerID) {
        video.addPeer(peerID, handlePeerVideo);
      });
      w.on('close', root.onErrorDigest);
      w.netStart();
    };

    root.updateBalance = function() {
      var w = $rootScope.wallet;
      if (!w) return;
      w.getBalance(false, function(balance, balanceByAddr) {
        $rootScope.totalBalance = balance;
        $rootScope.balanceByAddr = balanceByAddr;
        console.log('New balance:', balance);
        w.getBalance(true, function(balance) {
          $rootScope.availableBalance = balance;
          $rootScope.$digest();
        });
      });
    };

    root.setSocketHandlers = function() {
      Socket.removeAllListeners();

      var addrs = $rootScope.wallet.getAddressesStr();
      for (var i = 0; i < addrs.length; i++) {
        console.log('### SUBSCRIBE TO', addrs[i]);
        Socket.emit('subscribe', addrs[i]);
      }
      console.log('[controllerUtils.js.64]'); //TODO
      addrs.forEach(function(addr) {
        Socket.on(addr, function(txid) {
          console.log('Received!', txid);
          root.updateBalance();
        });
      });
    };

    return root;
  });

@@ -244,16 +244,40 @@
  return 
+$sce.trustAsResourceUrl(
 decodeUR
@@ -277,25 +277,16 @@
 ecodeURI
-Component
 ($rootSc
@@ -307,16 +307,17 @@
 opayer%5D)
+)
 ;%0A    %7D;
@@ -1131,17 +1131,8 @@
 eURI
-Component
 (url

fix ANGULAR JS PROBLEMMMAADKSKDLALS:DKA:LSDA