/***************************************************************************
*                                                                          *
*  Copyright (C) Golaem S.A.  All Rights Reserved.                         *
*                                                                          *
****************************************************************************/

#pragma once

#include "glmRTTI.h"

#include <glmGolaemCharacterDeclarations.h> // GolaemCharacter declarations

namespace glm
{
    class GLM_CORE_API FurInformationManipulator
    {
    public:
        FurInformationManipulator();
        FurInformationManipulator(const GlmString& furInformation); // need a const as constructor (or we can't manipulate get only data)
        ~FurInformationManipulator();

        void init(const GlmString& furInformation); // need a const as constructor (or we can't manipulate get only data)
        bool getFurProperty(const GlmString& propertyName, glm::GlmString& propertyValue);
        void setFurProperty(const GlmString& propertyName, const glm::GlmString& propertyValue);        
        const GlmString& getModifiedFurInformation(); // need that as we wanted a const as constructor (or we can't manipulate get only data)

        static void parseFurInfo(const glm::GlmString& furInformation, GlmMap<GlmString, GlmString>& furAttributes);

    private:        

        GlmString _furInformation;
        GlmMap<GlmString, GlmString> _furAttributes;
        bool _furInformationDirty;
    };

    /**
	* \brief Geometry Asset
	*/
    class GLM_CORE_API FurAssetV0
    {
        GLM_RTTI("20c9040c-84de-4df2-82c6-aff647504f44", FurAssetV0, addAttributes);

    public:
        GLM_CLASS_STAT_ID( glm::MemoryStatIds::GolaemShared);

        /// The fur information
        glm::GlmString _furInformation;

        FurAssetV0();

    protected:

        /**
		* \brief Inspection needed method declaring the inspectable attributes.
		*/
        static void addAttributes();
    };
} // namespace glm
