'use strict';

const meta = require('../meta');
const analytics = require('../analytics');
const privileges = require('../privileges');

const adminApi = module.exports;

adminApi.updateSetting = async (caller, { setting, value }) => {
	const ok = await privileges.admin.can('admin:settings', caller.uid);
	if (!ok) {
		throw new Error('[[error:no-privileges]]');
	}

	await meta.configs.set(setting, value);
};

adminApi.getAnalyticsKeys = async () => {
	const keys = await analytics.getKeys();

	// Sort keys alphabetically
	return keys.sort((a, b) => (a < b ? -1 : 1));
};

adminApi.getAnalyticsData = async (caller, { set, until, amount, units }) => {
	// Default returns views from past 24 hours, by hour
	if (!amount) {
		if (units === 'days') {
			amount = 30;
		} else {
			amount = 24;
		}
	}
	const getStats = units === 'days' ? analytics.getDailyStatsForSet : analytics.getHourlyStatsForSet;
	return await getStats(`analytics:${set}`, parseInt(until, 10) || Date.now(), amount);
};
