/**
 * app.js
 *
 * Use `app.js` to run your app without `sails lift`.
 * To start the server, run: `node app.js`.
 *
 * This is handy in situations where the sails CLI is not relevant or useful.
 *
 * For example:
 *   => `node app.js`
 *   => `forever start app.js`
 *   => `node debug app.js`
 *   => `modulus deploy`
 *   => `heroku scale`
 *
 *
 * The same command-line arguments are supported, e.g.:
 * `node app.js --silent --port=80 --prod`
 */

// Ensure we're in the project directory, so relative paths work as expected
// no matter where we actually lift from.
process.chdir(__dirname);
const cluster = require('cluster'),
      numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  // Fork workers.
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    if (signal) {
      console.log(`worker ${worker.process.pid} was killed by signal: ${signal}`);
    } else if (code !== 0) {
      console.log(`worker ${worker.process.pid} exited with error code: ${code}`);
    } else {
      console.log(`worker ${worker.process.pid} success!`);
    }
  });
} else {
  // Ensure a "sails" can be located:
  (function() {
    var sails;
    try {
      sails = require('sails');
    } catch (e) {
      console.error('To run an app using `node app.js`, you usually need to have a version of `sails` installed in the same directory as your app.');
      console.error('To do that, run `npm install sails`');
      console.error('');
      console.error('Alternatively, if you have sails installed globally (i.e. you did `npm install -g sails`), you can use `sails lift`.');
      console.error('When you run `sails lift`, your app will still use a local `./node_modules/sails` dependency if it exists,');
      console.error('but if it doesn\'t, the app will run with the global sails instead!');
      return;
    }

    // Try to get `rc` dependency
    var rc;
    try {
      rc = require('rc');
    } catch (e0) {
      try {
        rc = require('sails/node_modules/rc');
      } catch (e1) {
        console.error('Could not find dependency: `rc`.');
        console.error('Your `.sailsrc` file(s) will be ignored.');
        console.error('To resolve this, run:');
        console.error('npm install rc --save');
        rc = function () { return {}; };
      }
    }


    // Start server
    sails.lift(rc('sails'));
  })();
}
