#ifndef VIDEO_HPP
#define VIDEO_HPP

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

// C++
#include <string>

// Les types "USpeed Game Engine"
#include "Core/CoreTypes.hpp"

// Les classes de rendu
#include "Video/RenderPSP.hpp"
#include "Video/RenderOpenGL.hpp"

// Choix du moteur de rendu
#ifdef TARGET_SYSTEM_PSP
    #define USGE_RENDER_CLASS       USpeedGameEngine::RenderPSP
#elif defined TARGET_SYSTEM_WIN32
    #define USGE_RENDER_CLASS       USpeedGameEngine::RenderOpenGL
#endif

namespace USpeedGameEngine
{

class Video
{
    /****************
    * Les attributs *
    ****************/
    public :
        class Light;        //!< Classe de gestion de l'éclairage
        class Camera;       //!< Classe de gestion des caméras
        class Render;       //!< Classe de rendu 3D
    protected :
    private :

    /***************
    * Les méthodes *
    ***************/
    public :
        // Destructeur par défaut.
        ~Video();
        // Retourne l'instance unique de la classe.
        static Video *getInstance();
        // Retourne l'instance du moteur de rendu.
        static USGE_RENDER_CLASS *getRenderEngine();

        // Activation de l'anti-aliasing.
        void activateFSAA(bool state, unsigned int passNumber);
        // Retourne le nombre de passes de l'anti-aliasing.
        unsigned int getFSAA();
        // Retourne la taille de l'écran (largeur).
        unsigned int getScreenWidth();
        // Retourne la taille de l'écran (hauteur).
        unsigned int getScreenHeight();
        // Retourne la taille de la zone cliente de l'écran (largeur).
        unsigned int getClientWidth();
        // Retourne la taille de la zone cliente de l'écran (hauteur).
        unsigned int getClientHeight();
        // Permet de définir la taille de la fenêtre par défaut de l'application Win32.
        void setInitialWindowSize(unsigned int width, unsigned int height);
        // Permet de définir la taille minimale autorisée de la fenêtre de l'application Win32.
        void setMinimalWindowSize(unsigned int width, unsigned int height);
        // Choix de l'id de l'icône de l'application Win32 dans les ressources.
        void setIconId(unsigned int iconId);
        // Retourne l'id de l'icône de l'application Win32 dans les ressources.
        unsigned int getIconId();

    protected :
    private :
        // Constructeur par défaut
        Video();

};

}        // Fin "namespace USpeedGameEngine"

#endif
