'use strict';

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

var social = {};

social.postSharing = null;

social.getPostSharing = function (callback) {
	if (social.postSharing) {
		return callback(null, social.postSharing);
	}

	var networks = [
		{
			id: 'facebook',
			name: 'Facebook',
			class: 'fa-facebook',
		},
		{
			id: 'twitter',
			name: 'Twitter',
			class: 'fa-twitter',
		},
		{
			id: 'google',
			name: 'Google+',
			class: 'fa-google-plus',
		},
	];

	async.waterfall([
		function (next) {
			plugins.fireHook('filter:social.posts', networks, next);
		},
		function (networks, next) {
			db.getSetMembers('social:posts.activated', function (err, activated) {
				if (err) {
					return next(err);
				}

				networks.forEach(function (network, i) {
					networks[i].activated = (activated.indexOf(network.id) !== -1);
				});

				social.postSharing = networks;
				next(null, networks);
			});
		},
	], callback);
};

social.getActivePostSharing = function (callback) {
	social.getPostSharing(function (err, networks) {
		if (err) {
			return callback(err);
		}
		networks = networks.filter(function (network) {
			return network && network.activated;
		});
		callback(null, networks);
	});
};

social.setActivePostSharingNetworks = function (networkIDs, callback) {
	async.waterfall([
		function (next) {
			db.delete('social:posts.activated', next);
		},
		function (next) {
			if (!networkIDs.length) {
				return next();
			}
			db.setAdd('social:posts.activated', networkIDs, next);
		},
		function (next) {
			social.postSharing = null;
			next();
		},
	], callback);
};

module.exports = social;