#pragma once

struct FactoryInfo_t;

// TODO: Make this abstract and make it base class of CFactory.
class IFactory
{
public:
	virtual void AddFactory(const string& svFactoryName, void* pFactory) = 0;
	virtual void AddFactory(FactoryInfo_t factoryInfo) = 0;
	virtual size_t GetVersionIndex(const string& svInterfaceName) const = 0;
	virtual void GetFactoriesFromRegister(void) = 0;
	virtual CMemory GetFactoryPtr(const string& svFactoryName, bool versionLess = true) const = 0;
	virtual const char* GetFactoryFullName(const string& svFactoryName) const = 0;
};

constexpr const char* FACTORY_INTERFACE_VERSION = "VFactorySystem001";