'use strict';

const debug = require('../../share/utils/DebugConsole')('models:user');
const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
  id: {type: Number, unique: true},
  unique_name: {type: String},
  display_name: {type: String, index: true},
  icon: {type: String},
  updated_at: {type: Date},
  created_at: {type: Date}
});

UserSchema.pre('save', function(next) {
  this.updated_at = new Date();
  if (!this.created_at) {
    this.created_at = this.updated_at;
  }
  process.nextTick(next);
});

UserSchema.statics.createByTwitter = (token, tokenSecret, profile, callback) => {
  let User = mongoose.model('users');
  User.findOne({id: profile.id}).exec((reason, user) => {
    if (reason) {
      return callback(reason);
    }
    if (!user) {
      user = new User({id: profile.id});
    }
    debug('update user %s', user.unique_name);
    user.unique_name = profile.username.toLowerCase();
    user.display_name = profile.displayName;
    user.icon = profile.photos[0].value.replace(/_normal\./, '_200x200.');
    user.save(callback);
  });
};

module.exports = mongoose.model('users', UserSchema);
