#ifndef __THEME_H__
#define __THEME_H__

#ifdef __cplusplus
extern "C" {
#endif


typedef struct
{
	char titre[20];    // titre = valeur de l'option = nom du fichier xml sans le suffixe
	char fichier[256]; // chemin complet vers le fichier xml du thème (updates ou datadir)
	char detail[200];  // description du thème (fournie dans le fichier xml du thème)
} theme;

#define LISTE_THEMES_MAX 20                   // nombre maximum de thèmes dans la liste
extern theme liste_themes[LISTE_THEMES_MAX];  // liste des thèmes trouvés (updates + datadir)
extern int liste_themes_nb;                   // nombre d'éléments dans la liste des thèmes
extern char titre_theme[20];                  // titre du thème à utiliser


/*! \{ */
/*! Structure pour les couleurs RVB*/
typedef struct
{
    float rouge;
    float vert;
    float bleu;
} couleurs_rvb;
/* @} */

/*! \{ */
/*! Structure pour les couleurs RVB avec le canal alpha*/
typedef struct
{
    float rouge;
    float vert;
    float bleu;
    float alpha;
} couleurs_rvba;
/* @} */

/*!
 * @{ */
extern Uint8 couleur_mp;	 					/*!< Couleur utilisée pour les MP */
extern Uint8 couleur_canal_actif;				/*!< Couleur du canal actif */
extern Uint8 couleur_canaux;					/*!< Couleur des canaux non-actifs */
extern Uint8 couleur_dev_canal;					/*!< Couleur du canal #dev */
extern Uint8 couleur_coord_canal;				/*!< Couleur du canal #coord */
extern Uint8 couleur_mod_canal;                 /*!< Couleur du canal #mod */
extern Uint8 couleur_mg_canal;				/*!< Couleur du canal #mg */
extern Uint8 couleur_ig_canal;				/*!< Couleur du canal #ig */

extern int police_nom_pnj_dialogue;             /*!< Police utilisée pour le nom du PNJ lors du dialogue */
extern couleurs_rvb couleur_nom_pnj_dialogue;   /*!< Couleur utilisée pour le nom du PNJ lors du dialogue */

extern int police_titre;                        /*!< Police utilisée pour l'affichage du titre au-dessus des personnes */
extern couleurs_rvb couleur_titre;              /*!< Couleur utilisée pour l'affichage du titre au-dessus des personnages */

extern couleurs_rvba couleur_fond_fenetre;      /*!< Couleur utilisée pour le fond des fenêtres */
extern couleurs_rvba couleur_bord_fenetre;      /*!< Couleur utilisée pour le bord des fenêtres */
extern couleurs_rvba couleur_ligne_fenetre;     /*!< Couleur utilisée pour les lignes des fenêtres */

#ifdef FR_LIVRES
extern int police_texte_livre;                  /*!< Police utilisée pour le texte des livres */
#endif //FR_LIVRES

#ifdef FR_QUICKITEMS
extern int fr_quickitems_dim;          /*!< Taille d'une case de la barre rapide (hors cadre) */
extern int fr_quickitems_x;            /*!< position horizontale par défaut */
extern int fr_quickitems_y;            /*!< position verticale par défaut */
extern int fr_quickitems_dir;          /*!< orientation par défaut de la barre */
extern int fr_quickitems_delta;        /*!< Taille de la separation dans le barre rapide */
extern int fr_quickitems_division;     /*!< Nombre de case pour avoir un trait de separation */
extern int quickbar_x;
extern int quickbar_y;
extern int quickbar_dir;
extern couleurs_rvba fr_quickitems_zerocolor;  /*!< Couleur de la case lorsque le type d'objet est a zero */
extern couleurs_rvba fr_quickitems_coolcolor;  /*!< Couleur de la progression du cooldown sur la case */
#endif //FR_QUICKITEMS
/* @} */

/*!
 *  \ingroup theme
 *  \brief  Convertit une chaine de caractere en reel (float)
 *
 *      Convertion d'un chaine de caractere en reel (float)
 *
 *  \param valeur   Le contenu de la balise que l'on souhaite traite
 *  \param variable Adresse de la variable de retour
 *  \param xmlNode  Le noeud qu'il faut traites
 *
 *  \callgraph
*/
void strtod_securise(char * valeur, float * variable);

/*!
 *  \ingroup theme
 *  \brief  Convertit une chaine de caractere en entier (int)
 *
 *      Convertion d'un chaine de caractere en entier (int)
 *
 *  \param valeur   Le contenu de la balise que l'on souhaite traite
 *  \param variable Adresse de la variable de retour
 *  \param xmlNode  Le noeud qu'il faut traites
 *
 *  \callgraph
*/
void strtol_securise(char * valeur, int * variable);



/*!
 *  \ingroup theme
 *  \brief  Traite le fichier xml d'un thème
 *
 *      Vérifie la présence du fichier xml du thèmes
 *      Traitement du fichier pour charger les valeurs des variables définies
 *
 *  \param nom_fichier le nom du fichier xml du thème à charger
 *
 *  \callgraph
*/
void init_theme(char * titre);

/*!
 *  \ingroup theme
 *  \brief  Traite la liste de thèmes du fichier themes.xml
 *
 *      Vérifie la présence du fichier themes.xml
 *      Parcours le fichier pour initialiser la liste des thèmes disponibles
 *
 *  \callgraph
*/
void init_liste_themes();



int command_liste_themes();

int command_change_theme(char *text);



#ifdef __cplusplus
} // extern "C"
#endif //__cplusplus

#endif //__THEME_H__
