#include "Utilities/Referenced.h"


class File : public Referenced
{
public:
	bool isOpen ();
  unsigned long read (char *buffer, unsigned long size);
};



class FileSystem : public Referenced
{
public:

	FileSystem();
	File *openBinary (const std::string& filename);

private:

	static bool _PhysfsInialized;
};



FileSystem::FileSystem()
{
	PHYSFS_init (0);

	std::string appdir = PHYSFS_getUserDir();
	appdir += ".bluecore";

	if( !PHYSFS_setWriteDir(appdir.c_str()) )
	{
		if( (PHYSFS_setWriteDir(PHYSFS_getUserDir())) && (PHYSFS_mkdir(".bluecore")) )
			PHYSFS_setWriteDir( appdir.c_str() );
	}

	PHYSFS_addToSearchPath( appdir.c_str(), 0 );
	PHYSFS_addToSearchPath( "data", 1 );

	char **rc = PHYSFS_enumerateFiles ( "" );

	for ( char **i = rc; *i != 0; i++ )
	{
		std::string filename ( *i );

		if ( filename.substr ( filename.size() - 4, 4 ) == ".zip" )
		{
			PHYSFS_addToSearchPath ( ( "data/" + filename ).c_str(), 1 );
			BlueCore::log << ">>> Using addon: " << filename << endlog;
		}
	}

	PHYSFS_freeList ( rc );
}
