var App = App || {};

App.Bootstrap = function(auth, router, promise, presenterManager) {

	promise.wait(presenterManager.init())
		.then(function() {
			promise.wait(auth.tryLoginFromCookie())
				.then(startRouting)
				.fail(function(error) {
					promise.wait(auth.loginAnonymous())
						.then(startRouting)
						.fail(function() {
							console.log(arguments);
							window.alert('Fatal authentication error');
						});
				});
		}).fail(function() {
			console.log(arguments);
		});

	function startRouting() {
		try {
			router.start();
		} catch (err) {
			console.log(err);
		}
	}

};

App.DI.registerSingleton('bootstrap', ['auth', 'router', 'promise', 'presenterManager'], App.Bootstrap);
App.DI.registerManual('jQuery', function() { return window.$; });
App.DI.registerManual('pathJs', function() { return window.pathjs; });
App.DI.registerManual('_', function() { return window._; });
App.DI.registerManual('mousetrap', function() { return window.Mousetrap; });
App.DI.registerManual('marked', function() { return window.marked; });
App.DI.registerManual('nprogress', function() { return window.NProgress; });
App.DI.get('bootstrap');