/***************************************************************************
*                                                                          *
*  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 RenderingTypeV1;

    class HierarchicalSkeletonDescriptionV1;

    /**
	* \brief Character asset manager
	*/
    struct GLM_CORE_API AssetManagerV2
    {
        GLM_RTTI("cad33b1e-3fae-4417-ba4f-f52ba9f770d5", AssetManagerV2, 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<RenderingTypeV1*> _renderingTypes;

        AssetManagerV2();
        ~AssetManagerV2();

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

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