#include "infocenterstate.h"

#include "infocenter.h"

DECOMP_SIZE_ASSERT(InfocenterState, 0x94);

// GLOBAL: LEGO1 0x100f76a8
Infocenter::InfomainScript g_unk0x100f76a8[14] = {
	Infocenter::c_clickOnObjectsGuidanceDialogue,
	Infocenter::c_arrowNavigationGuidanceDialogue,
	Infocenter::c_elevatorGuidanceDialogue,
	Infocenter::c_radioGuidanceDialogue,
	Infocenter::c_exitGuidanceDialogue1,
	Infocenter::c_goOutsideGuidanceDialogue,
	Infocenter::c_experimentGuidanceDialogue,
	Infocenter::c_returnBackGuidanceDialogue1,
	Infocenter::c_bricksterWarningDialogue,
	Infocenter::c_infomanHiccup,
	Infocenter::c_infomanSneeze,
	Infocenter::c_infomanLaughs,
	Infocenter::c_newGameGuidanceDialogue,
	Infocenter::c_returnBackGuidanceDialogue3
};

// GLOBAL: LEGO1 0x100f76e0
Infocenter::InfomainScript g_unk0x100f76e0[6] = {
	Infocenter::c_bricksterWarningDialogue,
	Infocenter::c_newGameGuidanceDialogue,
	Infocenter::c_bricksterEscapedDialogue1,
	Infocenter::c_bricksterEscapedDialogue5,
	Infocenter::c_exitGuidanceDialogue2
	// Zero-terminated
};

// GLOBAL: LEGO1 0x100f76f8
Infocenter::InfomainScript g_unk0x100f76f8[6] = {
	Infocenter::c_returnBackGuidanceDialogue2,
	Infocenter::c_reenterInfoCenterDialogue1,
	Infocenter::c_reenterInfoCenterDialogue2,
	Infocenter::c_reenterInfoCenterDialogue3,
	Infocenter::c_reenterInfoCenterDialogue4
	// Zero-terminated
};

// GLOBAL: LEGO1 0x100f7710
Infocenter::InfomainScript g_unk0x100f7710[4] = {
	Infocenter::c_bricksterEscapedDialogue1,
	Infocenter::c_bricksterEscapedDialogue2,
	Infocenter::c_bricksterEscapedDialogue3,
	// Zero-terminated
};

// GLOBAL: LEGO1 0x100f7720
Infocenter::InfomainScript g_unk0x100f7720[4] = {
	Infocenter::c_bricksterEscapedDialogue4,
	Infocenter::c_bricksterEscapedDialogue5,
	Infocenter::c_bricksterEscapedDialogue6,
	Infocenter::c_bricksterEscapedDialogue7
};

// GLOBAL: LEGO1 0x100f7730
Infocenter::InfomainScript g_unk0x100f7730[4] = {
	Infocenter::c_leaveInfoCenterDialogue1,
	Infocenter::c_leaveInfoCenterDialogue2,
	Infocenter::c_leaveInfoCenterDialogue3,
	Infocenter::c_leaveInfoCenterDialogue4
};

// GLOBAL: LEGO1 0x100f7740
Infocenter::InfomainScript g_unk0x100f7740[4] =
	{Infocenter::c_unk569, Infocenter::c_unk570, Infocenter::c_unk571, Infocenter::c_unk572};

// GLOBAL: LEGO1 0x100f7750
Infocenter::InfomainScript g_unk0x100f7750[4] = {
	Infocenter::c_unk566,
	Infocenter::c_unk567,
	Infocenter::c_unk568,
	// Zero-terminated
};

// GLOBAL: LEGO1 0x100f7760
Infocenter::InfomainScript g_unk0x100f7760[2] = {Infocenter::c_bricksterDialogue, Infocenter::c_bricksterLaughs};

// FUNCTION: LEGO1 0x10071600
InfocenterState::InfocenterState()
{
	m_unk0x08 = LegoState::Playlist((MxU32*) g_unk0x100f76a8, sizeof(g_unk0x100f76a8) / sizeof(g_unk0x100f76a8[0]));

	m_unk0x14 = LegoState::Playlist((MxU32*) g_unk0x100f76e0, sizeof(g_unk0x100f76e0) / sizeof(g_unk0x100f76e0[0]) - 1);

	m_unk0x20[0] =
		LegoState::Playlist((MxU32*) g_unk0x100f76f8, sizeof(g_unk0x100f76f8) / sizeof(g_unk0x100f76f8[0]) - 1);

	m_unk0x20[1] =
		LegoState::Playlist((MxU32*) g_unk0x100f7710, sizeof(g_unk0x100f7710) / sizeof(g_unk0x100f7710[0]) - 1);

	m_unk0x20[2] = LegoState::Playlist((MxU32*) g_unk0x100f7720, sizeof(g_unk0x100f7720) / sizeof(g_unk0x100f7720[0]));

	m_unk0x44[0] = LegoState::Playlist((MxU32*) g_unk0x100f7730, sizeof(g_unk0x100f7730) / sizeof(g_unk0x100f7730[0]));

	m_unk0x44[1] = LegoState::Playlist((MxU32*) g_unk0x100f7740, sizeof(g_unk0x100f7740) / sizeof(g_unk0x100f7740[0]));

	m_unk0x44[2] =
		LegoState::Playlist((MxU32*) g_unk0x100f7750, sizeof(g_unk0x100f7750) / sizeof(g_unk0x100f7750[0]) - 1);

	m_unk0x68 = LegoState::Playlist((MxU32*) g_unk0x100f7760, sizeof(g_unk0x100f7760) / sizeof(g_unk0x100f7760[0]));

	memset(m_buffer, 0, sizeof(m_buffer));
}

// FUNCTION: LEGO1 0x10071920
InfocenterState::~InfocenterState()
{
	MxS16 i = 0;
	do {
		if (GetInfocenterBufferElement(i) != NULL) {
			delete GetInfocenterBufferElement(i)->GetAction();
			delete GetInfocenterBufferElement(i);
		}
		i++;
	} while (i < GetInfocenterBufferSize());
}
