/* Copyright (c) 2002-2009 Dovecot Sieve authors, see the included COPYING file 
 */

#include "lib.h"
#include "mail-user.h"
#include "master-service.h"
#include "master-service-settings.h"

#include "sieve-common.h"
#include "sieve-extensions.h"

#include "sieve-settings.h"

#include <stdlib.h>

static struct mail_user *_settings_user; 
static struct master_service *_settings_service;

/*
 * Initialization
 */

void sieve_settings_init
(struct master_service *service, struct mail_user *user) 
{
	_settings_user = user;
	_settings_service = service;
}

/*
 * Retrieval
 */
 
static const char *_sieve_setting_get_env_name
(const struct sieve_extension *ext, const char *identifier)
{
	if ( ext == NULL )
		return t_str_lcase(t_strconcat("sieve_", identifier, NULL));
	
	return t_str_lcase(t_strconcat("sieve_", ext->name, "_", identifier, NULL));
}

const char *sieve_setting_get(const char *identifier)
{
	const char *value = mail_user_plugin_getenv
		(_settings_user, _sieve_setting_get_env_name(NULL, identifier));

	printf("GET(%s) = %s\n", identifier, value);

	return value;
}

const char *sieve_setting_get_ext
(const struct sieve_extension *ext, const char *identifier)
{
	return mail_user_plugin_getenv
		(_settings_user, _sieve_setting_get_env_name(ext, identifier));
}

void sieve_setting_set(const char *identifier, const char *value)
{
	const char *setting;

	if ( _settings_service == NULL ) return;

	setting = t_strconcat("plugin/", 
		_sieve_setting_get_env_name(NULL, identifier), "=", value, NULL);
	
	printf("%s\n", setting);

	if ( master_service_set(_settings_service, setting) < 0 )
		i_unreached();
}

void sieve_setting_set_ext
(const struct sieve_extension *ext, const char *identifier, const char *value)
{
	const char *setting;

	if ( _settings_service == NULL ) return;

	setting = t_strconcat("plugin/", 
		_sieve_setting_get_env_name(NULL, identifier), "=", value, NULL);
	
	printf("%s\n", setting);

	if ( master_service_set(_settings_service, setting) < 0 )
		i_unreached();
}