/*jshint node:true*/
var stew = require('broccoli-stew');
var Funnel = require('broccoli-funnel');
var BroccoliMergeTrees = require('broccoli-merge-trees');

var OPTIONAL_ROUTES = [
  'optional-1',
  'optional-2'
];

module.exports = {
  name: 'process-optional-routes',

  isDevelopingAddon: function() {
    return true;
  },

  included: function included(app) {
    this._super.included.apply(this, arguments);
    if (typeof app.import !== 'function' && app.app) {
      app = app.app;
    }
    this.app = app;
  },

  _removeRoute: function(tree, routeName) {
    var routePattern = '*/routes/' + routeName + '.js';
    tree = stew.rm(tree, routePattern);

    return tree;
  },
  
  preprocessTree: function (type, tree) {
    if (type === 'js') {
      var routeFiles = OPTIONAL_ROUTES.map((route) => (`${route}.js`));

      var routesTree = new Funnel('app/routes', {
        files: routeFiles,
        destDir: 'dist/assets/optional',
        allowEmtpy: true
      });

      // var debugTree = stew.debug(routesTree, { name: 'routeFunnel' });

      return new BroccoliMergeTrees([tree, routesTree]);
    }

    return tree;
  },

  postprocessTree: function (type, tree) {
    if (this.app.env === 'test' || type !== 'js') {
      return tree;
    }

    return OPTIONAL_ROUTES.reduce(this._removeRoute, tree);
  }
};