
#ifndef TIER1_H
#define TIER1_H

#if defined( _WIN32 )
#pragma once
#endif

#include "iappsystem.h"
#include "convar.h"


void ConnectTier1Libraries(CreateInterfaceFn* pFactoryList, int nFactoryCount);
void DisconnectTier1Libraries();


template< class IInterface, int ConVarFlag = 0 >
class CTier1AppSystem : public CTier0AppSystem< IInterface >
{
	typedef CTier0AppSystem< IInterface > BaseClass;

public:
	virtual bool Connect(CreateInterfaceFn factory)
	{
		if (!BaseClass::Connect(factory))
			return false;

		ConnectTier1Libraries(&factory, 1);
		return true;
	}

	virtual void Disconnect()
	{
		DisconnectTier1Libraries();
		BaseClass::Disconnect();
	}

	virtual InitReturnVal_t Init()
	{
		InitReturnVal_t nRetVal = BaseClass::Init();
		if (nRetVal != INIT_OK)
			return nRetVal;

		if (g_pCVar)
		{
			ConVar_Register(ConVarFlag);
		}
		return INIT_OK;
	}

	virtual void Shutdown()
	{
		if (g_pCVar)
		{
			ConVar_Unregister();
		}
		BaseClass::Shutdown();
	}

	
	virtual AppSystemTier_t GetTier()
	{
		return APP_SYSTEM_TIER1;
	}
};


#endif  