'use strict';

var nconf = require('nconf'),
	async = require('async'),
	validator = require('validator'),

	translator = require('../../public/src/translator'),
	categories = require('../categories'),
	meta = require('../meta');

var helpers = {};

helpers.notFound = function(req, res, error) {
	if (res.locals.isAPI) {
		res.status(404).json({path: req.path.replace(/^\/api/, ''), error: error});
	} else {
		res.status(404).render('404', {path: req.path, error: error});
	}
};

helpers.notAllowed = function(req, res, error) {
	var uid = req.user ? req.user.uid : 0;

	if (uid) {
		if (res.locals.isAPI) {
			res.status(403).json({path: req.path.replace(/^\/api/, ''), loggedIn: !!uid, error: error});
		} else {
			res.status(403).render('403', {path: req.path, loggedIn: !!uid, error: error});
		}
	} else {
		if (res.locals.isAPI) {
			req.session.returnTo = nconf.get('relative_path') + req.url.replace(/^\/api/, '');
			res.status(401).json('not-authorized');
		} else {
			req.session.returnTo = nconf.get('relative_path') + req.url;
			res.redirect(nconf.get('relative_path') + '/login');
		}
	}
};

helpers.buildBreadcrumbs = function(cid, callback) {
	var breadcrumbs = [];

	async.whilst(function() {
		return parseInt(cid, 10);
	}, function(next) {
		categories.getCategoryFields(cid, ['name', 'slug', 'parentCid'], function(err, data) {
			if (err) {
				return next(err);
			}

			breadcrumbs.unshift({
				text: validator.escape(data.name),
				url: nconf.get('relative_path') + '/category/' + data.slug
			});

			cid = data.parentCid;
			next();
		});
	}, function(err) {
		if (err) {
			return callback(err);
		}

		translator.translate('[[global:home]]', meta.config.defaultLang || 'en_GB', function(translated) {
			breadcrumbs.unshift({
				text: translated,
				url: nconf.get('relative_path') + '/'
			});

			callback(null, breadcrumbs);
		});
	});
};

module.exports = helpers;