'use strict';

var meta = require.main.require('./src/meta');
var user = require.main.require('./src/user');

var library = {};

library.init = function(params, callback) {
	var app = params.router;
	var middleware = params.middleware;

	app.get('/admin/plugins/persona', middleware.admin.buildHeader, renderAdmin);
	app.get('/api/admin/plugins/persona', renderAdmin);

	callback();
};

library.addAdminNavigation = function(header, callback) {
	header.plugins.push({
		route: '/plugins/persona',
		icon: 'fa-paint-brush',
		name: 'Persona Theme'
	});

	callback(null, header);
};

library.defineWidgetAreas = function(areas, callback) {
	const locations = ['header', 'sidebar', 'footer'];
	const templates = [
		'categories.tpl', 'category.tpl', 'topic.tpl', 'users.tpl',
		'unread.tpl', 'recent.tpl', 'popular.tpl', 'top.tpl', 'tags.tpl', 'tag.tpl'
	];
	function capitalizeFirst(str) {
		return str.charAt(0).toUpperCase() + str.slice(1)
	}
	templates.forEach(template => {
		locations.forEach(location => {
			areas.push({
				name: capitalizeFirst(template.split('.')[0]) + ' ' + capitalizeFirst(location),
				template: template,
				location: location,
			});
		});
	});

	areas = areas.concat([
		{
			name: "Account Header",
			template: "account/profile.tpl",
			location: "header"
		},
	]);

	callback(null, areas);
};

library.getThemeConfig = async function(config) {
	const settings = await meta.settings.get('persona');
	config.hideSubCategories = settings.hideSubCategories === 'on';
	config.hideCategoryLastPost = settings.hideCategoryLastPost === 'on';
	config.enableQuickReply = settings.enableQuickReply === 'on';
	return config;
};

function renderAdmin(req, res, next) {
	res.render('admin/plugins/persona', {});
}

library.addUserToTopic = async function (hookData) {
	if (hookData.req.user) {
		const userData = await user.getUserData(hookData.req.user.uid);
		hookData.templateData.loggedInUser = userData;
	} else {
		hookData.templateData.loggedInUser =  {
			uid: 0,
			username: '[[global:guest]]',
			picture: user.getDefaultAvatar(),
			'icon:text': '?',
			'icon:bgColor': '#aaa',
		};
	}
	return hookData;
};

module.exports = library;