"use strict";

module.exports = function(redisClient, module) {
	var helpers = module.helpers.redis;

	module.setAdd = function(key, value, callback) {
		callback = callback || function() {};
		redisClient.sadd(key, value, function(err, res) {
			callback(err);
		});
	};

	module.setsAdd = function(keys, value, callback) {
		callback = callback || function() {};
		helpers.multiKeysValue(redisClient, 'sadd', keys, value, function(err, res) {
			callback(err);
		});
	};

	module.setRemove = function(key, value, callback) {
		callback = callback || function() {};
		redisClient.srem(key, value, function(err, res) {
			callback(err);
		});
	};

	module.setsRemove = function(keys, value, callback) {
		callback = callback || function() {};
		helpers.multiKeysValue(redisClient, 'srem', keys, value, function(err, res) {
			callback(err);
		});
	};

	module.isSetMember = function(key, value, callback) {
		redisClient.sismember(key, value, function(err, result) {
			callback(err, result === 1);
		});
	};

	module.isSetMembers = function(key, values, callback) {
		helpers.multiKeyValues(redisClient, 'sismember', key, values, function(err, results) {
			callback(err, results ? helpers.resultsToBool(results) : null);
		});
	};

	module.isMemberOfSets = function(sets, value, callback) {
		helpers.multiKeysValue(redisClient, 'sismember', sets, value, function(err, results) {
			callback(err, results ? helpers.resultsToBool(results) : null);
		});
	};

	module.getSetMembers = function(key, callback) {
		redisClient.smembers(key, callback);
	};

	module.getSetsMembers = function(keys, callback) {
		helpers.multiKeys(redisClient, 'smembers', keys, callback);
	};

	module.setCount = function(key, callback) {
		redisClient.scard(key, callback);
	};

	module.setsCount = function(keys, callback) {
		helpers.multiKeys(redisClient, 'scard', keys, callback);
	};

	module.setRemoveRandom = function(key, callback) {
		callback = callback || function() {};
		redisClient.spop(key, callback);
	};

	return module;
};