#ifndef VIDEO_LIGHT_HPP
#define VIDEO_LIGHT_HPP

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

// C++
#include <string>

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


namespace USpeedGameEngine
{

class Video::Light
{
    /****************
    * Les attributs *
    ****************/
    public :
        USGE_Float3 position;       //!< Position de la lumière
        USGE_Float3 ambient;        //!< Couleur ambiante
        USGE_Float3 diffuse;        //!< Couleur diffuse
        USGE_Float3 specular;       //!< Couleur specular
        bool positionnal;           //!< Type de lumière : directionnelle ou positionnelle
        bool state;                 //!< État de la lumière : active ou non ?
    protected :
    private :

    /***************
    * Les méthodes *
    ***************/
    public :
        // Destructeur par défaut
        ~Light();

        // Sélection d'une lumière.
        static Light *getLight(unsigned int num);

        // Permet d'activer/désactiver l'éclairage.
        static void activate(bool state);
        // Permet de savoir si l'éclairage est activé ou non.
        static bool isActive();
        // Retourne le nombre maximum de lumières autorisées.
        static unsigned int getMaxLights();

        /////////////////////////////////////
        // Concernant la lumière elle-même //
        /////////////////////////////////////
        // Définition de l'état activation.
        void setState(bool activate);
        // Accès à l'état activation.
        bool getState();

        // Définition du type de lumière.
        void setType(bool pos);
        // Accès au type de lumière.
        bool getType();

        // Définition de la position.
        void setPosition(USGE_Float3 pos);
        // Accès à la position.
        USGE_Float3 getPosition();

        // Définition de la couleur ambiante.
        void setAmbient(USGE_Float3 color);
        // Accès à la couleur ambiante.
        USGE_Float3 getAmbient();

        // Définition de la couleur diffuse.
        void setDiffuse(USGE_Float3 color);
        // Accès à la couleur diffuse.
        USGE_Float3 getDiffuse();

        // Définition de la couleur spéculaire.
        void setSpecular(USGE_Float3 color);
        // Accès à la couleur spéculaire.
        USGE_Float3 getSpecular();

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

}        // Fin "namespace USpeedGameEngine"

#endif
