"use strict";

var HotSwap = {},
	winston = require('winston'),
	stack;

HotSwap.prepare = function (app) {
	stack = app._router.stack;
};

HotSwap.find = function (id) {
	if (stack) {
		for(var x = 0,numEntries = stack.length; x < numEntries; x++) {
			if (stack[x].handle.hotswapId === id) {
				return x;
			}
		}
	} else {
		winston.error('[hotswap] HotSwap module has not been prepared!');
	}
};

HotSwap.replace = function (id, router) {
	var idx = HotSwap.find(id);
	if (idx) {
		delete stack[idx].handle;	// Destroy the old router
		stack[idx].handle = router;	// Replace with the new one
		winston.verbose('[hotswap] Router with id `' + id + '` replaced successfully');
	} else {
		winston.warn('[hotswap] Could not find router in stack with hotswapId `' + id + '`');
	}
};

module.exports = HotSwap;