'use strict';

var	meta = require('./../meta'),
	db = require('./../database'),
	plugins = require('./../plugins');

module.exports = function(User) {

	User.getSettings = function(uid, callback) {
		db.getObject('user:' + uid + ':settings', function(err, settings) {
			if(err) {
				return callback(err);
			}

			if(!settings) {
				settings = {};
			}

			plugins.fireHook('filter:user.getSettings', {uid: uid, settings: settings}, function(err, data) {
				if(err) {
					return callback(err);
				}

				settings = data.settings;

				settings.showemail = settings.showemail ? parseInt(settings.showemail, 10) !== 0 : false;
				settings.enableDailyDigest = settings.enableDailyDigest || 'daily';
				settings.usePagination = settings.usePagination ? parseInt(settings.usePagination, 10) === 1 : parseInt(meta.config.usePagination, 10) === 1;
				settings.topicsPerPage = settings.topicsPerPage ? parseInt(settings.topicsPerPage, 10) : parseInt(meta.config.topicsPerPage, 10) || 20;
				settings.postsPerPage = settings.postsPerPage ? parseInt(settings.postsPerPage, 10) : parseInt(meta.config.postsPerPage, 10) || 10;
				settings.notificationSounds = settings.notificationSounds ? parseInt(settings.notificationSounds, 10) === 1 : true;
				settings.language = settings.language || meta.config.defaultLang || 'en_GB';
				callback(null, settings);
			});
		});
	};

	User.saveSettings = function(uid, data, callback) {

		if(!data.topicsPerPage || !data.postsPerPage || parseInt(data.topicsPerPage, 10) <= 0 || parseInt(data.postsPerPage, 10) <= 0) {
			return callback(new Error('[[error:invalid-pagination-value]]'));
		}

		data.language = data.language || meta.config.defaultLang;

		plugins.fireHook('action:user.saveSettings', {uid: uid, settings: data});
		db.setObject('user:' + uid + ':settings', {
			showemail: data.showemail,
			enableDailyDigest: data.enableDailyDigest || 'daily',
			usePagination: data.usePagination,
			topicsPerPage: data.topicsPerPage,
			postsPerPage: data.postsPerPage,
			notificationSounds: data.notificationSounds,
			language: data.language || meta.config.defaultLang
		}, callback);
	};
};