import mongoose from 'mongoose';
import autoinc  from 'mongoose-id-autoinc';
import logger  from '../website/server/libs/api-v3/logger';
import nconf    from 'nconf';
import repl     from 'repl';
import gulp     from 'gulp';

// Add additional properties to the repl's context
let improveRepl = (context) => {

  // Let "exit" and "quit" terminate the console
  ['exit', 'quit'].forEach((term) => {
    Object.defineProperty(context, term, { get() { process.exit(); }});
  });

  // "clear" clears the screen
  Object.defineProperty(context, 'clear', { get() {
    process.stdout.write('\u001B[2J\u001B[0;0f');
  }});

  context.Challenge = require('../website/server/models/challenge').model;
  context.Group     = require('../website/server/models/group').model;
  context.User      = require('../website/server/models/user').model;

  var isProd = nconf.get('NODE_ENV') === 'production';
  var mongooseOptions = !isProd ? {} : {
    replset: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } },
    server: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } }
  };
  autoinc.init(
    mongoose.connect(
      nconf.get('NODE_DB_URI'),
      mongooseOptions,
      function(err) {
        if (err) throw err;
        logger.info('Connected with Mongoose');
      }
    )
  );

};

gulp.task('console', (cb) => {
  improveRepl(repl.start({
    prompt: 'Habitica > '
  }).context);
});
