Sequelize = require('sequelize')
sequelize = require('../config/sequelize')
bcrypt = require('bcrypt')
Q = require('q')

User = sequelize.define('user', {
  name:
    type: Sequelize.STRING
    validate: notEmpty: true
  email:
    type: Sequelize.STRING
    validate: isEmail: true
  encrypted_password:
    type: Sequelize.STRING
    notEmpty: true
    get: ->
      null
  confirmed:
    type: Sequelize.BOOLEAN
    defaultValue: false
  salt:
    type: Sequelize.STRING
    notEmpty: true
    get: ->
      null

},
  tableName: 'users'
  underscored: true
  classMethods: {}
  instanceMethods:
    setPassword: (password) ->
      user = this
      deferred = Q.defer()
      bcrypt.genSalt 10, (err, salt) ->
        if err
          return deferred.reject(err)
        bcrypt.hash password, salt, (err, hash) ->
          if err
            return deferred.reject(err)
          user.setDataValue 'salt', salt
          user.setDataValue 'encrypted_password', hash
          deferred.resolve user
          return
        return
      deferred.promise
    comparePassword: (password, cb) ->
      user = @dataValues
      bcrypt.compare password, user.encrypted_password, (err, match) ->
        if err
          return cb(err)
        if match
          cb null, true
        else
          cb err
      return
    toJSON: ->
      val = @get(plain: true)
      delete val.encrypted_password
      delete val.salt
      val

)

# User.sync(force: false)

module.exports = User

# ---
# generated by js2coffee 2.2.0
