#ifndef IMAGE_HPP
#define IMAGE_HPP

// Détection du système cible...
#include "usgeDetectSystem.h"

// Personnelles
#include "Core/CoreTypes.hpp"


namespace USpeedGameEngine
{

class Image
{
    /****************
    * Les attributs *
    ****************/
    public :
    protected :
    private :
        unsigned long int *data;        //!< Données de l'image chargée
        unsigned long int width;        //!< Largeur de l'image chargée
        unsigned long int height;       //!< Hauteur de l'image chargée

    /***************
    * Les méthodes *
    ***************/
    public :
        // Constructeur et destructeur par défaut
        Image();
        ~Image();

        /////////////////////////////////////
        // Chargement/écriture de fichiers //
        /////////////////////////////////////
        bool load(char *filename, USGE_Image type);
        bool loadFromBuffer(unsigned char *data, unsigned long int bufferLength, USGE_Image type);
        bool write(char *filename, USGE_Image type);

        //////////////////////////////////
        // Autres fonctions implémentée //
        //////////////////////////////////
        // Permet de charger un rectangle transparent de la taille spécifiée.
        bool loadBox(unsigned long int width, unsigned long int height);
        // Permet d'effacer l'image stockée et de ré-initialiser les variables.
        void clear();
        // Permet de remplir l'image existante avec la couleur spécifiées.
        void fill(unsigned long int arvb);
        // Copie l'image spécifiée sur l'image actuelle aux coordonnées spécifiées.
        bool copyFrom(int x, int y, Image *img);
        // Permet de déplacer les données de l'image chargée vers le pointeur spécifié.
        unsigned long int *moveDatas();

        ////////////////
        // Accesseurs //
        ////////////////
        // La taille de l'image actuelle
        unsigned long int getWidth();
        unsigned long int getHeight();
        // Les données de l'image actuelle
        unsigned long int *getData();

    protected :
    private :
        // Permet de charger l'image PNG
        bool loadPNGFromBuffer(char *dataOrFilename, unsigned long int bufferLength, bool isFilename);
        // Permet de lire l'image JPEG
        bool loadJPEGFromBuffer(char *dataOrFilename, unsigned long int bufferLength, bool isFilename);
        // Permet de charger l'image TGA
        bool loadTGAFromBuffer(char *dataOrFilename, unsigned long int bufferLength, bool isFilename);
};

}        // Fin "namespace USpeedGameEngine"

#endif
