
#ifndef __WFX_SCENE_MATERIAL_H__
#define __WFX_SCENE_MATERIAL_H__

#include <WFX/WFXIncludes.h>
#include <WFX/scene/Color.h>
#include <WFX/scene/TextureManager.h>

namespace WFX {

    namespace scene {

        /**
         * Represents material properties
         */
        class Material {
            public:
                /** Ctor */
                Material();

                /** return Name */
                inline const std::string& getName() {
                    return Name;
                }
                
                /** return Emissive color */
                inline Color& getEmissive() {
                    return Emissive;
                }
                
                /** return Ambient color */
                inline Color& getAmbient() {
                    return Ambient;
                }
                
                /** return Diffuse color */
                inline Color& getDiffuse() {
                    return Diffuse;
                }
                
                /** return Specular color */
                inline Color& getSpecular() {
                    return Specular;
                }

                /** return Shininess */
                inline Real getShininess() {
                    return Shininess;
                }

                /** return Alpha */
                inline Real getAlpha() {
                    return Alpha;
                }

                /** return Texture */
                inline UInt getTexture() {
                    return Texture;
                }

                /** set Name */
                inline void setName(const std::string& n) {
                    Name = n;
                }
                
                /** set Emissive color */
                inline void setEmissive(const Color& c) {
                    Emissive = c;
                }
                
                /** set Ambient color */
                inline void setAmbient(const Color& c) {
                    Ambient = c;
                }
                
                /** set Diffuse color */
                inline void setDiffuse(const Color& c) {
                    Diffuse = c;
                }
                
                /** set Specular color */
                inline void setSpecular(const Color& c) {
                    Specular = c;
                }

                /** set Shininess */
                inline void setShininess(Real r) {
                    Shininess = r;
                }
                
                /** set Alpha */
                inline void setAlpha(Real r) {
                    Alpha = r;
                }

                /** set TextureHandle */
                inline void setTexture(UInt t) {
                    Texture = t;
                }
               
                void printDebug();
            protected:
            
            private:
                friend class StudioLoader;

                std::string     Name; 
                Color           Emissive;
                Color           Ambient;
                Color           Diffuse;
                Color           Specular;
                Real            Shininess;
                Real            Alpha;
                UInt            Texture;

        };

    }

}


#endif //include guard


