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

#pragma once

#include "glmRTTI.h"
#include "glmBlendShapeGroupV0.h"

namespace glm
{
    struct AssetsGroupV0;
    struct ShaderAssetV0;
    struct GeometryGroupV0;
    struct RenderingTypeV0;

    class HierarchicalSkeletonDescriptionV1;

    /**
	* \brief Character asset manager
	*/
    struct AssetManagerV0
    {
        GLM_RTTI("79fd84b0-91a6-43eb-84bb-7b43cf2fb0fb", AssetManagerV0, addAttributes);

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

        /// Name of the manager
        glm::GlmString _name;

        /// Asset groups
        glm::Array<AssetsGroupV0*> _assetGroups;

        /// Geometry group
        GeometryGroupV0* _geometryGroup;

        /// The mesh names and their associated shaders
        GlmMap<glm::GlmString, glm::Array<ShaderAssetV0*>> _meshesShaders;

        glm::Array<RenderingTypeV0*> _renderingTypes;

        glm::Array<BlendShapeGroupV0> _blendShapeGroups;

        AssetManagerV0();
        ~AssetManagerV0();

    protected:
        void getAllShaderAssets(glm::PODArray<ShaderAssetV0*>& shaderAssets) const;

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