#pragma once

#include <SDL2/SDL_events.h> // Para SDL_Event
#include <SDL2/SDL_render.h> // Para SDL_Renderer
#include <SDL2/SDL_stdinc.h> // Para Uint32
#include <vector>			 // Para vector
#include "utils.h"			 // Para color_t
class AnimatedSprite;
class Asset;
class Input;
class Resource;
class Screen;
class Text;
struct JA_Music_t;

class GameOver
{
private:
	// Objetos y punteros
	Screen *screen;				  // Objeto encargado de dibujar en pantalla
	SDL_Renderer *renderer;		  // El renderizador de la ventana
	Resource *resource;			  // Objeto con los recursos
	Asset *asset;				  // Objeto con los ficheros de recursos
	Input *input;				  // Objeto pata gestionar la entrada
	Text *text;					  // Objeto para escribir texto en pantalla
	AnimatedSprite *playerSprite; // Sprite con el jugador
	AnimatedSprite *tvSprite;	  // Sprite con el televisor

	// Variables
	int preCounter;			   // Contador previo
	int counter;			   // Contador
	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<Color> colors; // Vector con los colores para el fade
	Color color;			   // Color usado para el texto y los sprites
	int endSection;			   // Contador: cuando acaba la sección
	int iniFade;			   // Contador: cuando emiepza el fade
	int fadeLenght;			   // Contador: duración del fade
	JA_Music_t *music;		   // Musica que suena durante el juego

	// Actualiza el objeto
	void update();

	// Dibuja el final en pantalla
	void render();

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

	// Comprueba las entradas
	void checkInput();

	// Actualiza el color usado para renderizar los textos e imagenes
	void updateColor();

	// Dibuja los sprites
	void renderSprites();

	// Actualiza los contadores
	void updateCounters();

public:
	// Constructor
	GameOver();

	// Destructor
	~GameOver();

	// Bucle principal
	void run();
};