#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
 * OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
 *
 * OpenRCT2 is the work of many authors, a full list can be found in contributors.md
 * For more information, visit https://github.com/OpenRCT2/OpenRCT2
 *
 * OpenRCT2 is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * A full copy of the GNU General Public License can be found in licence.txt
 *****************************************************************************/
#pragma endregion

#include "../addresses.h"
#include "../localisation/localisation.h"
#include "../sprites.h"
#include "../interface/widget.h"
#include "../interface/window.h"

static void window_title_logo_paint(rct_window *w, rct_drawpixelinfo *dpi);

static rct_window_event_list window_title_logo_events = {
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	window_title_logo_paint,
	NULL
};

static void window_title_logo_draw_expansion_packs(rct_drawpixelinfo *dpi);

/**
 * Creates the window containing the logo and the expansion packs on the title screen.
 *  rct2: 0x0066B679 (part of 0x0066B3E8)
 */
void window_title_logo_open()
{
	int i, packs;
	rct_window *window;

	// Count number of expansion packs
	packs = 0;
	for (i = 0; i < 16; i++)
		if (RCT2_GLOBAL(RCT2_ADDRESS_EXPANSION_FLAGS, uint16) & (1 << i))
			packs++;

	// Create the window
	window = window_create(
		0,
		0,
		200,
		106 + (10 * packs),
		&window_title_logo_events,
		WC_TITLE_LOGO,
		WF_STICK_TO_BACK | WF_TRANSPARENT
	);
	window->widgets = (rct_widget*)0x009A9658; // mouse move bug in original game, keep this address and no crash happens
	window_init_scroll_widgets(window);
	window->colours[0] = 129;
	window->colours[1] = 129;
	window->colours[2] = 129;
}

/**
*
*  rct2: 0x0066B872
*/
static void window_title_logo_paint(rct_window *w, rct_drawpixelinfo *dpi)
{
	// gfx_draw_sprite(dpi, SPR_MENU_LOGO, w->x, w->y, 0);
	int x = 2, y = 2;
	gfx_draw_sprite(dpi, SPR_G2_LOGO, w->x + x, w->y + y, 0);
	gfx_draw_sprite(dpi, SPR_G2_TITLE, w->x + x + 104, w->y + y + 18, 0);
	window_title_logo_draw_expansion_packs(dpi);
}

static void window_title_logo_draw_expansion_packs(rct_drawpixelinfo *dpi)
{
	int packs, x, y, i;
	char *buffer, *names;

	x = 0;
	y = 105;

	packs = RCT2_GLOBAL(RCT2_ADDRESS_EXPANSION_FLAGS, uint16);
	names = RCT2_ADDRESS(RCT2_ADDRESS_EXPANSION_NAMES, char);
	buffer = (char*)RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER;
	while (packs != 0) {
		if (packs & 1) {
			// Prefix for expansion name
			buffer[0] = '\n';
			buffer[1] = '\v';
			buffer[2] = FORMAT_YELLOW; // Colour of the text
			buffer[3] = '+';
			buffer[4] = ' ';

			// Copies the expansion name to the buffer, offset by 5
			i = 0;
			do {
				buffer[5 + i] = names[i];
				i++;
			} while (names[i - 1] != 0);

			gCurrentFontSpriteBase = FONT_SPRITE_BASE_SMALL;
			gfx_draw_string(dpi, buffer, 0, x, y);
			y += 10;
		}

		packs = packs >> 1;
		names += 128;
	}
}
