text: 'use strict';
  
  angular.module('copayApp.controllers').controller('tabReceiveController', function($rootScope, $scope, $timeout, $log, $ionicModal, $state, $ionicHistory, $ionicPopover, storageService, platformInfo, walletService, profileService, configService, lodash, gettextCatalog, popupService, bwcError, bitcoinCashJsService) {
  
    var listeners = [];
    $scope.bchAddressType = 'cashaddr';
    var bchAddresses = {};
  
    $scope.isCordova = platformInfo.isCordova;
    $scope.isNW = platformInfo.isNW;
  
    $scope.requestSpecificAmount = function() {
      $state.go('tabs.paymentRequest.amount', {
        id: $scope.wallet.credentials.walletId,
        coin: $scope.wallet.coin
      });
    };
  
    $scope.setAddress = function(newAddr) {
      $scope.addr = null;
      if (!$scope.wallet || $scope.generatingAddress || !$scope.wallet.isComplete()) return;
      $scope.generatingAddress = true;
      walletService.getAddress($scope.wallet, newAddr, function(err, addr) {
        $scope.generatingAddress = false;
  
        if (err) {
          //Error is already formated
          popupService.showAlert(err);
        }
  
        if ($scope.wallet.coin == 'bch') {
            bchAddresses = bitcoinCashJsService.translateAddresses(addr);
            $scope.addr = bchAddresses[$scope.bchAddressType];
        } else {
            $scope.addr = addr;
        }
  
        $timeout(function() {
          $scope.$apply();
        }, 10);
      });
    };
  
    $scope.displayAddress = function(type) {
      $scope.bchAddressType = type;
      $scope.addr = bchAddresses[$scope.bchAddressType];
    }
  
    $scope.goCopayers = function() {
      $ionicHistory.removeBackView();
      $ionicHistory.nextViewOptions({
        disableAnimate: true
      });
      $state.go('tabs.home');
      $timeout(function() {
        $state.transitionTo('tabs.copayers', {
          walletId: $scope.wallet.credentials.walletId
        });
      }, 100);
    };
  
    $scope.openBackupNeededModal = function() {
      $ionicModal.fromTemplateUrl('views/includes/backupNeededPopup.html', {
        scope: $scope,
        backdropClickToClose: false,
        hardwareBackButtonClose: false
      }).then(function(modal) {
        $scope.BackupNeededModal = modal;
        $scope.BackupNeededModal.show();
      });
    };
  
    $scope.close = function() {
      $scope.BackupNeededModal.hide();
      $scope.BackupNeededModal.remove();
    };
  
    $scope.doBackup = function() {
      $scope.close();
      $scope.goToBackupFlow();
    };
  
    $scope.goToBackupFlow = function() {
      $state.go('tabs.receive.backupWarning', {
        from: 'tabs.receive',
        walletId: $scope.wallet.credentials.walletId
      });
    };
  
    $scope.shouldShowReceiveAddressFromHardware = function() {
      var wallet = $scope.wallet;
      if (wallet.isPrivKeyExternal() && wallet.credentials.hwInfo) {
        return (wallet.credentials.hwInfo.name == walletService.externalSource.intelTEE.id);
      } else {
        return false;
      }
    };
  
    $scope.showReceiveAddressFromHardware = function() {
      var wallet = $scope.wallet;
      if (wallet.isPrivKeyExternal() && wallet.credentials.hwInfo) {
        walletService.showReceiveAddressFromHardware(wallet, $scope.addr, function() {});
      }
    };
  
    $scope.$on("$ionicView.beforeEnter", function(event, data) {
      $scope.wallets = profileService.getWallets();
      $scope.singleWallet = $scope.wallets.length == 1;
  
      if (!$scope.wallets[0]) return;
  
      // select first wallet if no wallet selected previously
      var selectedWallet = checkSelectedWallet($scope.wallet, $scope.wallets);
      $scope.onWalletSelect(selectedWallet);
  
      $scope.showShareButton = platformInfo.isCordova ? (platformInfo.isIOS ? 'iOS' : 'Android') : null;
  
      listeners = [
        $rootScope.$on('bwsEvent', function(e, walletId, type, n) {
          // Update current address
          if ($scope.wallet && walletId == $scope.wallet.id && type == 'NewIncomingTx') $scope.setAddress(true);
        })
      ];
    });
  
    $scope.$on("$ionicView.leave", function(event, data) {
      lodash.each(listeners, function(x) {
        x();
      });
    });
  
    var checkSelectedWallet = function(wallet, wallets) {
      if (!wallet) return wallets[0];
      var w = lodash.find(wallets, function(w) {
        return w.id == wallet.id;
      });
      if (!w) return wallets[0];
      return wallet;
    }
  
    var setProtocolHandler = function() {
      $scope.protocolHandler = walletService.getProtocolHandler($scope.wallet);
    }
  
    $scope.onWalletSelect = function(wallet) {
      $scope.wallet = wallet;
      setProtocolHandler();
      $scope.setAddress();
    };
  
    $scope.showWalletSelector = function() {
      if ($scope.singleWallet) return;
      $scope.walletSelectorTitle = gettextCatalog.getString('Select a wallet');
      $scope.showWallets = true;
    };
  
    $scope.shareAddress = function() {
      if (!$scope.isCordova) return;
      var protocol = 'bitcoin';
      if ($scope.wallet.coin == 'bch') protocol += 'cash';
      window.plugins.socialsharing.share(protocol + ':' + $scope.addr, null, null, null);
    }
  });
  