'use strict';
/**
 * @ngdoc controller
 * @name RegisterController
 * @description
 *  새로운 system 을 등록
 */
app.controller('RegisterController', function ($rootScope, $scope, $state, toastr, availableModels, Registration, Auth, User) {

  // 로그인 된 상태에서 접근하면 system-overview 로 이동
  Auth.currentUser().then(function(user) {
    if(user) {
      $state.go('menu.system-overview');
    }
  });

  // 초기값 설정
  $scope.register = {
    option: 'existing',   // existing account 로 생성
    modelType: availableModels[0]
  };
  $scope.availableModels = availableModels;

  $scope.doNext = function() {
    var key = $scope.register.key.first + $scope.register.key.second + $scope.register.key.third + $scope.register.key.fourth,
        key = key.toUpperCase(),
        type = $scope.register.modelType;
    console.log(key);

		if ($scope.register.option === 'create') {    // 사용자 생성을 하면서 system 생성
      Registration.setSystemKey(key);
      Registration.setSystemType(type);
			$state.go('send-email');
		} else if ($scope.register.option === 'existing') {   // existing account 로 로그인 하면서 system 생성

			var jsonData = JSON.stringify({ key: key, modelType: type, username: $scope.register.username, password: $scope.register.password });
			console.log(jsonData);

      // 시스템 생성을 위한 로그인
			User.loginForCreate(jsonData).then(function(data) {
				if(data.result) {
          if (data.status) {  // result 와 status 가 모두 true 일 때
            Registration.setSystemKey(key);
            Registration.setBStationMac(data.mac);
            Registration.setSystemType(type);

            $state.go('add-new-system');
          } else {  // status=false: forgot password 로 reset 했는데 base station 이 없거나 통신문제가 발생한 경우
            $rootScope.systemsInfo = angular.copy(data.info);
            $rootScope.credentials = {
              key: key,
              modelType: type,
              username: $scope.register.username,
              password: $scope.register.password
            };
            $state.go('ignore-offline-systems-for-create');
          }
				} else {
					toastr.error(data.error);
          $scope.register.password = '';
          $scope.registerForm.$setPristine();
				}
			}).catch(toastr.error);
		} 
	};
});

/**
 * @ngdoc controller
 * @name SendEmailController
 * @description
 *  사용자 등록시 temporary password 발송
 */
app.controller('SendEmailController', function ($scope, $state, toastr, Registration, Auth) {

  // 로그인 된 상태에서 접근하면 system-overview 로 이동
  Auth.currentUser().then(function(user) {
    if(user) {
      $state.go('menu.system-overview');
    }
  });

	var keyData = Registration.getSystemKey(),
      type = Registration.getSystemType();

	$scope.doNext = function() {

		var emailData = $scope.email;

		var jsonData = JSON.stringify( { modelType: type, key: keyData, email: emailData });
		console.log(jsonData);

    // 사용자 등록시 temporary password 를 요청한 email 로 보내기
    Registration.sendTempPswd(jsonData).then(function(data) {
      Registration.setEmail(emailData);
      $state.go('add-user');
    })
    .catch(toastr.error);
	};
});



app.controller('AddUserController', function ($scope, $timeout, $state, toastr, Registration, Auth, User) {

  // 로그인 된 상태에서 접근하면 system-overview 로 이동
  Auth.currentUser().then(function(user) {
    if(user) {
      $state.go('menu.system-overview');
    }
  });

  $scope.doNext = function() {
		var user = {};
  	user.username = $scope.user.username;
		user.password = $scope.user.password;
		user.tempPassword = $scope.user.tempPassword;
		user.userEmail = $scope.user.email;
		user.email = Registration.getEmail();
		user.key = Registration.getSystemKey();
		user.modelType = Registration.getSystemType();

		var jsonData = JSON.stringify(user);
		console.log(jsonData);

		User.create(jsonData).
			then(function(data) {
				Registration.setBStationMac(data.mac);
        
        $timeout(function() {
          $state.go('add-new-system');  
        }, 500);
        		
			}).
			catch(toastr.error);
	};
});

/**
 * @ngdoc controller
 * @name AddNewSystemController
 * @description
 *  사용자 생성
 */
app.controller('AddNewSystemController', function ($scope, $state, toastr, timeZones, Registration, Systems) {

  $scope.baseStationMac = Registration.getBStationMac();
  $scope.timeZones = timeZones;
  $scope.system = {};
  $scope.system.timezone_dst = true;
  $scope.timeFormat = 'hh:mm:ss a';
  //$scope.system.timeZone = null;

  // DST: daylight saving time true/false 설정
  $scope.checkDST = function() {
    if ($scope.system.timeZone.s_time === '0.0.0 00:00:00') {
      $scope.system.timezone_dst = false;
    } else {
      $scope.system.timezone_dst = true;
    }
  };

 	$scope.doNext = function() {

 		var systemName = $scope.system.name,
          roomName = $scope.system.roomName,
   customerAddress = $scope.system.customerAddress,
     customerPhone = $scope.system.customerPhone,
      customerName = $scope.system.customerName,
     installerName = $scope.system.installerName,
           macAddr = Registration.getBStationMac(),
           keyData = Registration.getSystemKey(),
              type = Registration.getSystemType();

		var jsonData = JSON.stringify( { systemName: systemName, 
                                      modelType: type, 
                                      key: keyData,
                                      timezone_id:  $scope.system.timeZone.id,
                                      timezone_dst: $scope.system.timezone_dst ? 1:0,
                                      time_type: $scope.timeFormat === 'hh:mm:ss a' ? 0:1 ,
                                      roomName: roomName,
                                      customerAddress: customerAddress,
                                      customerPhone: customerPhone,
                                      customerName: customerName,
                                      installerName: installerName,
                                      bstationMac: macAddr, 
                                      bstationName: type + ' ' + macAddr.slice(10,12)  } );

		console.log(jsonData);

    // system 생성
	  Systems.createOne(jsonData)
      .then(function(data) {
  			return Systems.fetch();
      })
      .then(function(data) {
        $state.go('system-select');
      })
      .catch(function(error) {
        toastr.error(error, 'Error');
      });
	};
});
