'use strict';
/**
 * @ngdoc service
 * @name User
 * @description
 *  사용자 정보 관리와 관련된 기능
 */
app.service('User', function ($rootScope, $http, $q, $window, Auth, jwtHelper) {

  /**
   * 로그인
   * @memberof User
   * @param {String} data 사용자 아이디/패스워드 json string
   * @returns {Promise} Future object
   */
  this.login = function(data) {
    var self = this,
        d = $q.defer();

    // 로그인 API 호출
    $http.post('/urcassistant/api/user/login', data).success(function(response) {
      console.log(response);
      if (response.result) {
        var token = jwtHelper.decodeToken(response.token);
        var name = token.sub;
        var id = token.usr_id;
        var user = { id: id, username: name, email: response.email, token: response.token};
        Auth.setCurrentUser(user);
      }
      d.resolve(response); 
    }).error(function (error) {
      d.reject(error);
    });

    return d.promise;
  };

  /**
   * 로그아웃
   * @memberof User
   * @returns {Promise} Future object
   */
  this.logout = function() {
    var d = $q.defer();
    Auth.removeCurrentUser();
    d.resolve();
    return d.promise;
  };

  /**
   * 사용자 패스워드 변경
   * @memberof User
   * @param {String} data 이전 패스워드/변경할 패스워드 json string
   * @returns {Promise} Future object
   */
  this.changePassword = function(data) {
    var d = $q.defer(),
     self = this;

    // 사용자 패스워드 변경 API 호출
    $http.post('/urcassistant/api/user/new_password', data)
    .success(function(response) {
      console.log(response);
      if(response.result) {
        d.resolve(response);
      } else {
        d.reject(response.error);
      }
    })
    .error(function(error) {
      d.reject(error);
    });

    return d.promise;
  };

  /**
   * company 목록 얻기
   * @memberof User
   * @returns {Promise} Future object
   */
  this.companyList = function (options) {

    var d = $q.defer(),
      jsonData;

    if (options) {
      jsonData = JSON.stringify(options);
    }

    // job 목록 얻기 API 호출
    $http.post('/urcassistant/api/user/company', jsonData).success(function(response) {
      console.log(response);
      if(response.result) {
        d.resolve(response.data);
      } else {
        d.reject(response.error);
      }
    }, function(error) {
      d.reject(error);
    });

    return d.promise;
  };

});
