/***************************************************************************
*                                                                          *
*  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 AssetManagerV1
    {
        GLM_RTTI("9c588ca5-86fa-44fa-b487-64e49142c40e", AssetManagerV1, 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;

        AssetManagerV1();
        ~AssetManagerV1();

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

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