/*!
 * Module dependencies.
 */

var loopback = require('../loopback');

/**
 * Export the middleware.
 */

module.exports = models;

/**
 * Return a script that defines all remote models.
 */

function models(app) {
  return function (req, res, next) {
    var script = 'window.loopback.remoteModels = ';
    var models = [];
    app.handler('rest').adapter.getClasses().forEach(function(c) {
      if (!c.ctor) {
        // Skip classes that don't have a shared ctor
        // as they are not LoopBack models
        console.error('Skipping %j as it is not a LoopBack model', name);
        return;
      }
      models.push(toJSON(c));
    });
    res.send(script + JSON.stringify(models, null, 2));
  }
}

function toJSON(sharedClass) {
  var model = loopback.getModel(sharedClass.name);

  var result = {
    modelName: model.modelName,
    settings: model.settings,
    properties: model.properties,
    baseRoute: sharedClass.routes[0],
    methods: sharedClass.methods
  };

  result.settings.base = model.super_.modelName;

  return result;
}