'use strict';

angular.module('copayApp.directives')
  .directive('qrScanner', function($rootScope, $timeout, $ionicModal, gettextCatalog, platformInfo) {

    var isCordova = platformInfo.isCordova;
    var isWP = platformInfo.isWP;
    var isIOS = platformInfo.isIOS;

    var controller = function($scope) {

      var onSuccess = function(result) {
        $timeout(function() {
          window.plugins.spinnerDialog.hide();
        }, 100);
        if (isWP && result.cancelled) return;

        $timeout(function() {
          var data = isIOS ? result : result.text;
          $scope.onScan({
            data: data
          });
        }, 1000);
      };

      var onError = function(error) {
        $timeout(function() {
          window.plugins.spinnerDialog.hide();
        }, 100);
      };

      $scope.cordovaOpenScanner = function() {
        window.plugins.spinnerDialog.show(null, gettextCatalog.getString('Preparing camera...'), true);
        $timeout(function() {
          if (isIOS) {
            cloudSky.zBar.scan({}, onSuccess, onError);
          } else {
            cordova.plugins.barcodeScanner.scan(onSuccess, onError);
          }
          if ($scope.beforeScan) {
            $scope.beforeScan();
          }
        }, 100);
      };

      $scope.modalOpenScanner = function() {
        $ionicModal.fromTemplateUrl('views/modals/scanner.html', {
          scope: $scope,
          animation: 'slide-in-up'
        }).then(function(modal) {
          $scope.scannerModal = modal;
          $scope.scannerModal.show();
        });
      };

      $scope.openScanner = function() {
        if (isCordova) {
          $scope.cordovaOpenScanner();
        } else {
          $scope.modalOpenScanner();
        }
      };
      $scope.setFn({theScanFn: $scope.openScanner});
    };

    return {
      restrict: 'E',
      scope: {
        onScan: "&",
        setFn: "&",
        beforeScan: "&"
      },
      controller: controller,
      replace: true,
      template: '<a on-tap="openScanner()"><i class="icon ion-qr-scanner"></i></a>'
    }
  });
