#ifndef IMAGELOADERS_H
#define IMAGELOADERS_H
#include <string>
#include <map>
#ifdef Revision
#undef Revision
#endif
#define Revision "imageloader.h $Revision: 1.5 $"
/**
 * Управление загрузчиками изображений
 * @author Denis A. Birukov aka Messenger of death
 * @date 13.05.2007
 */
/**
 * Функция производит создание загрузчика изображений
 * @param name Имя создаваемого загрузчика
 * @param driver Имя драйвера
 * @param replace если установлен в true, то в случае, если загрузчик с заданным именем уже существует, он будет удален.
 * @return true в случае успеха. false в случае неудачи. Причина неудачи может быть получена через _get_last_error() либо _get_error(); 
 * @author Denis A. Birukov aka Messenger of death
 * @date 13.05.2007
 */
extern "C" bool imageloader_create ( std::string name, std::string driver, bool replace = false );

/**
 * Функция удаляет загрузчик.
 * @param name Имя удаляемого устройства
 * @return true в случае успеха. false в случае неудачи. Причина неудачи может быть получена через _get_last_error() либо _get_error()
 * @author Denis A. Birukov aka Messenger of death
 * @date 13.05.2007
 */
extern "C" bool imageloader_remove ( std::string name );

/**
 * Загружает указанное изображение
 * @param loader_name имя загрузчика
 * @param video_name имя видео устройства
 * @param image_name имя изображения
 * @param group_name имя группы в которую загружать изображение
 * @param surface_name имя поверхности
 * @param overwrite заменять существующее изображение или нет
 * @return false в случае ошибки, иначе true
 * @author Denis A. Birukov aka Messenger of death
 * @date 13.05.2007
 */
extern "C" bool imageloader_loadimage ( std::string loader_name, std::string video_name, std::string image_name, std::string group_name, std::string surface_name, bool overwrite=false );

/**
 * Загружает указанное изображение. По очереди пытается загрузить его всеми существующими загрузчиками, поставляя раширения.
 * @param video_name имя видео устройства
 * @param image_name имя изображения
 * @param group_name имя группы в которую загружать изображение
 * @param surface_name имя поверхности
 * @param overwrite заменять существующее изображение или нет
 * @return false в случае ошибки, иначе true. Ошибка обозначает что не удалось загрузить ни один вариант имени файла ни одним загрузчиком
 * @author Denis A. Birukov aka Messenger of death
 * @date 13.05.2007
 */
extern "C" bool imageloader_loadimage_noext ( std::string video_name, std::string image_name, std::string group_name, std::string surface_name, bool overwrite=false );

/**
 * Функция возвращает ссылку на текст предыдущей ошибки.
 * @return текст ошибки. Если ошибки небыло - строка будет пустой.
 * @author Messenger of death
 * @date 13.05.2007
 */
extern "C" std::string imageloader_error();
/**
* Получение версии библиотеки
* @return строку, содержащую версию библиотеки
* @author Messenger of death
* @date 13.05.2007
*/



extern "C" std::string imageloader_version();

extern "C" void imageloader_seterror(std::string text);
class Image_Loader
{
	public:
		virtual ~Image_Loader() {};
		virtual bool _loadimage ( std::string video_name, std::string image_name, std::string group_name, std::string surface_name, bool overwrite=false ) =0;
		virtual std::string _get_version() =0;
		virtual std::string _get_driver_name() =0;
};

#endif
