#ifndef CONFIG_H
#define CONFIG_H

#include <string>
#include "INI_File.h"

#include "MemoryManager/debugNew.h"

/**
 * classe permettant de gerer la configuration de l'application.
 * cette classe utilise le pattern <B>SINGLETON</B> afin de pouvoir etre accessible de partout.
 * on peut recuperer les valeure du fichier de configuration en faisant appel au methodes
 * getVariable() qui retourne un float et getValue() qui retourne une string.
 */
class Config
{
private:
	/**
	 * l'instance unique de config pour le pattern singleton.
	 */
	static Config* instance;

	CINI_File fichier;
	/**
	 * contructeur par defaut : en privée pour le pattern singleton
	 */
	Config(void);
	/**
	 * destructeur par defaut : en privée pour le pattern singleton
	 */
	virtual ~Config(void);
public:
	/** 
	 * methode permettant de recuperer l'instance unique de Config.
	 */
	static Config& getInstance();
	/**
	 * methode permettant de detruire l'instance unique de Config.
	 */
	static void destroy();

	/**
	 * methode permettant de recuperer la valeur float d'une variable du fichier de
	 * configuration
	 * @param section: la section dans le fichier de configuration
	 * @param varaible : le nom de la variable à recuperer
	 * @return float : la valeur de la variable, 0 si la variable n'existe pas.
	 */
	float getVariable(const std::string& section, const std::string& variable);

	/**
	 * methode permettant de recuperer la valeure d'une variable du fichier de configuration
	 * @param section: la section dans le fichier de configuration
	 * @param varaible : le nom de la variable à recuperer
	 * @return string : la valeur de la variable.
	 */
	 std::string getValue(const std::string& section, const std::string& variable);

	 /**
	  * methode permettant de charger le fichier de configuration depuis un fichier passé en parametre.
	  * @param path : le chemin du fichier de configuration à charger.
	  * @return bool : permet de savoir si l'ouverture s'est bien passé : true si tout s'est bien passe, false sinon.
	  */
	 bool load(const std::string path);
};

#include "MemoryManager/debugNewOff.h"

#endif
