#pragma once

#include <SDL2/SDL.h>
#include "const.h"
#include "utils.h"
#include "sprite.h"
#include "screen.h"
#include "asset.h"
#include "text.h"
#include "jail_audio.h"
#include <vector>

#ifndef TITLE_H
#define TITLE_H

// Clase Title
class Title
{
private:
	struct letter_t
	{
		std::string letter; // Letra a escribir
		int x;				// Posición en el eje x
		bool enabled;		// Solo se escriben y mueven si estan habilitadas
	};

	SDL_Renderer *renderer;		   // El renderizador de la ventana
	Screen *screen;				   // Objeto encargado de dibujar en pantalla
	Asset *asset;				   // Objeto con los ficheros de recursos
	SDL_Event *eventHandler;	   // Manejador de eventos
	LTexture *texture;			   // Textura con los graficos
	Sprite *sprite;				   // Sprite para manejar la textura
	Text *text;					   // Objeto para escribir texto en pantalla
	JA_Music music;				   // Musica del titulo
	int counter;				   // Contador
	section_t section;			   // Estado del bucle principal para saber si continua o se sale
	std::string longText;		   // Texto que aparece en la parte inferior del titulo
	int ticks;					   // Contador de ticks para ajustar la velocidad del programa
	int ticksSpeed;				   // Velocidad a la que se repiten los bucles del programa
	std::vector<letter_t> letters; // Vector con las letras de la marquesina

	// Actualiza las variables
	void update();

	// Dibuja en pantalla
	void render();

	// Comprueba el manejador de eventos
	void checkEventHandler();

	// Actualiza la marquesina
	void updateMarquee();

	// Dibuja la marquesina
	void renderMarquee();

public:
	// Constructor
	Title(SDL_Renderer *renderer, Screen *screen, Asset *asset);

	// Destructor
	~Title();

	// Bucle principal
	section_t run();
};

#endif
