#include "stdafx.h"
#include "FolderTexturePack.h"

FolderTexturePack::FolderTexturePack(DWORD id, const wstring &name, File *folder, TexturePack *fallback) : AbstractTexturePack(id, folder, name, fallback)
{
	// 4J Stu - These calls need to be in the most derived version of the class
	loadIcon();
	loadName();
	loadDescription();

	bUILoaded = false;
}

InputStream *FolderTexturePack::getResourceImplementation(const wstring &name) //throws IOException
{
#if 0
	final File file = new File(this.file, name.substring(1));
	if (!file.exists()) {
		throw new FileNotFoundException(name);
	}

	return new BufferedInputStream(new FileInputStream(file));
#endif

	wstring wDrive = L"";
	// Make the content package point to to the UPDATE: drive is needed
#ifdef _XBOX
	wDrive=L"GAME:\\DummyTexturePack\\res";
#else
	wDrive = L"Common\\DummyTexturePack\\res";
#endif
	InputStream *resource = InputStream::getResourceAsStream(wDrive + name);
	//InputStream *stream = DefaultTexturePack::class->getResourceAsStream(name);
	//if (stream == NULL)
	//{
	//	throw new FileNotFoundException(name);
	//}

	//return stream;
	return resource;
}

bool FolderTexturePack::hasFile(const wstring &name)
{
	File file = File( getPath() + name);
	return file.exists() && file.isFile();
	//return true;
}

bool FolderTexturePack::isTerrainUpdateCompatible()
{
#if 0
	final File dir = new File(this.file, "textures/");
	final boolean hasTexturesFolder = dir.exists() && dir.isDirectory();
	final boolean hasOldFiles = hasFile("terrain.png") || hasFile("gui/items.png");
	return hasTexturesFolder || !hasOldFiles;
#endif
	return true;
}

wstring FolderTexturePack::getPath(bool bTitleUpdateTexture /*= false*/)
{
	wstring wDrive;
#ifdef _XBOX
		wDrive=L"GAME:\\" + file->getPath() + L"\\";
#else
		wDrive=L"Common\\" + file->getPath() + L"\\";
#endif
	return wDrive;
}

void FolderTexturePack::loadUI()
{
#ifdef _XBOX
	//"file://" + Drive + PathToXZP + "#" + PathInsideXZP

	//L"file://game:/ui.xzp#skin_default.xur"

	// Load new skin
	if(hasFile(L"TexturePack.xzp"))
	{
		const DWORD LOCATOR_SIZE = 256; // Use this to allocate space to hold a ResourceLocator string 
		WCHAR szResourceLocator[ LOCATOR_SIZE ];

		swprintf(szResourceLocator, LOCATOR_SIZE,L"file://%lsTexturePack.xzp#skin_Minecraft.xur",getPath().c_str());

		XuiFreeVisuals(L"");
		app.LoadSkin(szResourceLocator,NULL);//L"TexturePack");
		bUILoaded = true;
		//CXuiSceneBase::GetInstance()->SetVisualPrefix(L"TexturePack");
	}

	AbstractTexturePack::loadUI();
#endif
}

void FolderTexturePack::unloadUI()
{
#ifdef _XBOX
	// Unload skin
	if(bUILoaded)
	{
		XuiFreeVisuals(L"TexturePack");
		XuiFreeVisuals(L"");
		CXuiSceneBase::GetInstance()->SetVisualPrefix(L"");
		CXuiSceneBase::GetInstance()->SkinChanged(CXuiSceneBase::GetInstance()->m_hObj);
	}
	AbstractTexturePack::unloadUI();
#endif
}