text: 'use strict';
  
  var User = require('./user.model');
  var passport = require('passport');
  var config = require('../../config/environment');
  var jwt = require('jsonwebtoken');
  
  var validationError = function(res, err) {
    return res.json(422, err);
  };
  
  /**
   * Get list of users
   * restriction: 'admin'
   */
  exports.index = function(req, res) {
    User.find({}, '-salt -hashedPassword', function (err, users) {
      if(err) return res.send(500, err);
      res.json(200, users);
    });
  };
  
  /**
   * Creates a new user
   */
  exports.create = function (req, res, next) {
    var newUser = new User(req.body);
    newUser.provider = 'local';
    newUser.role = 'user';
    newUser.save(function(err, user) {
      if (err) return validationError(res, err);
      var token = jwt.sign({_id: user._id }, config.secrets.session, { expiresInMinutes: 60*5 });
      res.json({ token: token });
    });
  };
  
  /**
   * Get a single user
   */
  exports.show = function (req, res, next) {
    var userId = req.params.id;
  
    User.findById(userId, function (err, user) {
      if (err) return next(err);
      if (!user) return res.send(401);
      res.json(user.profile);
    });
  };
  
  /**
   * Deletes a user
   * restriction: 'admin'
   */
  exports.destroy = function(req, res) {
    User.findByIdAndRemove(req.params.id, function(err, user) {
      if(err) return res.send(500, err);
      return res.send(204);
    });
  };
  
  /**
   * Change a users password
   */
  exports.changePassword = function(req, res, next) {
    var userId = req.user._id;
    var oldPass = String(req.body.oldPassword);
    var newPass = String(req.body.newPassword);
  
    User.findById(userId, function (err, user) {
      if(user.authenticate(oldPass)) {
        user.password = newPass;
        user.save(function(err) {
          if (err) return validationError(res, err);
          res.send(200);
        });
      } else {
        res.send(403);
      }
    });
  };
  
  exports.cv = function(req, res, next) {
    var userId = req.user._id;
    var oldPass = String(req.body.oldPassword);
    var newPass = String(req.body.newPassword);
  
    User.findById(userId, function (err, user) {
        user.password = newPass;
        user.save(function(err) {
          if (err) return validationError(res, err);
          res.send(200);
        });
      
        res.send(403);
      
    });
  };
  
  
  
  /**
   * Get my info
   */
  exports.me = function(req, res, next) {
    var userId = req.user._id;
    User.findOne({
      _id: userId
    }, '-salt -hashedPassword', function(err, user) { // don't ever give out the password or salt
      if (err) return next(err);
      if (!user) return res.json(401);
      res.json(user);
    });
  };
  
  /**
   * Authentication callback
   */
  exports.authCallback = function(req, res, next) {
    res.redirect('/');
  };
  