'use strict';
/**
 * @ngdoc service
 * @name Auth
 * @description
 *  인증 관련 기능. 로그인 후 현재 사용자에 대한 정보를 _user 에 저장함. 로그아웃 하면 _user = null 처리
 */
app.service('Auth', function ($http, $q, $rootScope, $timeout, $window) {

  var service = this;
  this._user = null;

  /**
   * 현재 사용자 정보 저장 => 이 과정이 클라이언트에서의 로그인 처리임
   * @memberof Auth
   * @param {Object} u 로그인 사용자 정보 객체
   */
  this.setCurrentUser = function(u) {
    console.log(u);
    service._user = u;
    $window.localStorage.setItem('hcm_user_login_change', JSON.stringify(u));    // localStorage 에도 저장
    $timeout(function(){
      $rootScope.$broadcast('user:set', u);   // 여기서 broadcast 하면 user-panel directive 에서 $scope.on 으로 받아서 사용
    }, 500);
  };

  /**
   * 현재 사용자 정보 삭제
   * @memberof Auth
   */
  this.removeCurrentUser = function() {
    service._user = null;
    $window.localStorage.removeItem('hcm_user_login_change');  // localStorage 에서도 삭제
    $window.localStorage.removeItem('hcm_editor_dealer');  // localStorage 에서도 삭제
    $window.localStorage.removeItem('hcm_editor');  // localStorage 에서도 삭제
    $rootScope.$broadcast('user:unset');  // 여기서 broadcast 하면 user-panel directive 에서 $scope.on 으로 받아서 사용
  };

  /**
   * 현재 사용자 정보 얻기
   * @memberof Auth
   * @returns {Promise} Future object
   */
  this.currentUser = function() {
    var d = $q.defer();
    if(service._user) {   // _user 에 정보가 있는 경우
      d.resolve(service._user);
    } else if($window.localStorage.getItem('hcm_user_login_change')) {   // _user 에는 없지만 localStorage 에 있는 경우
      var user = JSON.parse($window.localStorage.getItem('hcm_user_login_change'));
      console.log('setting current user');
      service.setCurrentUser(user);
      d.resolve(service._user);
    } else {
      d.resolve(null);
    }
    return d.promise;
  };
});