/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* JavaScript for MainUI (SOGoRootPage) */

(function() {
  'use strict';

  angular.module('SOGo.MainUI', ['SOGo.Common', 'SOGo.Authentication']);

  /**
   * @ngInject
   */
  LoginController.$inject = ['$scope', '$window', '$timeout', 'Dialog', '$mdDialog', 'Authentication'];
  function LoginController($scope, $window, $timeout, Dialog, $mdDialog, Authentication) {
    var vm = this;

    this.$onInit = function() {
      this.creds = {
        username: $window.cookieUsername,
        password: null,
        rememberLogin: angular.isDefined($window.cookieUsername) && $window.cookieUsername.length > 0
      };
      // Send selected language only if user has changed it
      if (/\blanguage=/.test($window.location.search))
        this.creds.language = $window.language;
      this.loginState = false;

      // Code pattern for Google verification code
      this.verificationCodePattern = '\\d{6}';

      // Show login once everything is initialized
      this.showLogin = false;
      $timeout(function() { vm.showLogin = true; }, 100);
    };

    this.login = function() {
      vm.loginState = 'authenticating';
      Authentication.login(vm.creds)
        .then(function(data) {

          if (data.gamissingkey) {
            vm.loginState = 'googleauthenticatorcode';
          }
          else {
            vm.loginState = 'logged';
            vm.cn = data.cn;

            // Let the user see the succesfull message before reloading the page
            $timeout(function() {
              if ($window.location.href === data.url)
                $window.location.reload(true);
              else
                $window.location.href = data.url;
            }, 1000);
          }
        }, function(msg) {
          vm.loginState = 'error';
          vm.errorMessage = msg.error;
        });
      return false;
    };

    this.restoreLogin = function() {
      vm.loginState = false;
      delete vm.creds.verificationCode;
    };

    this.showAbout = function($event) {
      $mdDialog.show({
        targetEvent: $event,
        templateUrl: 'aboutBox.html',
        controller: AboutDialogController,
        controllerAs: 'about'
      });
      AboutDialogController.$inject = ['$mdDialog'];
      function AboutDialogController($mdDialog) {
        this.closeDialog = function() {
          $mdDialog.hide();
        };
      }
    };

    this.changeLanguage = function($event) {
      // Reload page
      $window.location.href = ApplicationBaseURL + 'login?language=' + this.creds.language;
    };
  }

  angular
    .module('SOGo.MainUI')
    .controller('LoginController', LoginController);
})();
