#pragma once
#include <SDL2/SDL.h>
#include "common/animatedsprite.h"
#include "common/asset.h"
#include "common/jail_audio.h"
#include "common/resource.h"
#include "common/screen.h"
#include "common/sprite.h"
#include "common/text.h"
#include "common/texture.h"
#include "common/utils.h"
#include "const.h"
#include <vector>

#ifndef GAME_OVER_H
#define GAME_OVER_H

class GameOver
{
private:
	// Objetos y punteros
	SDL_Renderer *renderer;		  // El renderizador de la ventana
	Screen *screen;				  // Objeto encargado de dibujar en pantalla
	Resource *resource;			  // Objeto con los recursos
	Asset *asset;				  // Objeto con los ficheros de recursos
	options_t *options;			  // Puntero a las opciones del juego
	SDL_Event *eventHandler;	  // Manejador de eventos
	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
	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<color_t> colors; // Vector con los colores para el fade
	color_t 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 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 checkEventHandler();

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

	// Dibuja los sprites
	void renderSprites();

	// Actualiza los contadores
	void updateCounters();

	// Cambia la paleta
	void switchPalette();

public:
	// Constructor
	GameOver(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options);

	// Destructor
	~GameOver();

	// Bucle principal
	section_t run();
};

#endif
