#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 CREDITS_H
#define CREDITS_H

// Clase Credits
class Credits
{
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
	Text *text;						// Objeto para escribir texto en pantalla
	int counter;					// Contador
	section_t section;				// Estado del bucle principal para saber si continua o se sale
	Uint32 ticks;						// Contador de ticks para ajustar la velocidad del programa
	Uint32 ticksSpeed;					// Velocidad a la que se repiten los bucles del programa
	std::vector<std::string> texts; // Vector con las letras de la marquesina
	SDL_Texture *textTexture;		// Textura para dibujar el texto

	// Actualiza las variables
	void update();

	// Dibuja en pantalla
	void render();

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

	// Escribe el texto en la textura
	void fillTexture();

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

	// Destructor
	~Credits();

	// Bucle principal
	section_t run();
};

#endif
