#ifndef INCLUDED_MODELSTORE
#define INCLUDED_MODELSTORE

#include <Math/Vector.h>

#include <memory>
#include <map>
#include <string>

namespace Dubious {
namespace Utility {
class NativeManager;
typedef std::shared_ptr<NativeManager> NativeManagerPtr;
}
namespace Physics 
{
class Model;
typedef std::shared_ptr<Model> ModelPtr;
typedef std::map<std::string,ModelPtr> ModelPtrMap;
}
namespace Renderer 
{
class Model;
typedef std::shared_ptr<Model> ModelPtr;
typedef std::map<std::string,ModelPtr> ModelPtrMap;
}
}

class AAssetManager;

using namespace Dubious;

//////////////////////////////////////////////////////////////
class ModelStore
{
public:
	ModelStore();
	~ModelStore();

	Renderer::ModelPtr 	GetVisibleModel( AAssetManager& Manager, const std::string& File );
	Renderer::ModelPtr 	GetShadowModel( AAssetManager& Manager, const std::string& File );
	Physics::ModelPtr 	GetPhysicsModel( AAssetManager& Manager, const std::string& File );
	Renderer::ModelPtr 	GetVisibleModel( const Math::CubeVector& Size );
	Renderer::ModelPtr 	GetShadowModel( const Math::CubeVector& Size );
	Physics::ModelPtr 	GetPhysicsModel( const Math::CubeVector& Size );

private:
	Renderer::ModelPtrMap m_VisibleModels;
	Renderer::ModelPtrMap m_ShadowModels;
	Physics::ModelPtrMap m_PhysicsModels;
};

#endif

