

'use strict';

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



module.exports = function(Topics) {
	var terms = {
		day: 86400000,
		week: 604800000,
		month: 2592000000,
		year: 31104000000
	};

	Topics.getLatestTopics = function(uid, start, end, term, callback) {
		Topics.getLatestTids(start, end, term, function(err, tids) {
			if (err) {
				return callback(err);
			}

			Topics.getTopics('topics:recent', uid, tids, function(err, data) {
				if (err) {
					return callback(err);
				}

				data.nextStart = end + 1;
				callback(null, data);
			});
		});
	};

	Topics.getLatestTids = function(start, end, term, callback) {
		var since = terms.day;
		if (terms[term]) {
			since = terms[term];
		}

		var count = parseInt(end, 10) === -1 ? end : end - start + 1;

		db.getSortedSetRevRangeByScore('topics:recent', start, count, Infinity, Date.now() - since, callback);
	};

	Topics.updateTimestamp = function(tid, timestamp, callback) {
		async.parallel([
			function(next) {
				Topics.updateRecent(tid, timestamp, next);
			},
			function(next) {
				Topics.setTopicField(tid, 'lastposttime', timestamp, next);
			}
		], callback);
	};

	Topics.updateRecent = function(tid, timestamp, callback) {
		callback = callback || function() {};
		db.sortedSetAdd('topics:recent', timestamp, tid, callback);
	};

	Topics.removeRecent = function(tid, callback) {
		db.sortedSetRemove('topics:recent', tid, callback);
	};
};
