#pragma once

#include <SDL2/SDL_render.h> // for SDL_Renderer
#include <SDL2/SDL_stdinc.h> // for Uint32
#include <memory>			 // for shared_ptr
#include <vector>			 // for vector
#include "utils.h"			 // for Color
class AnimatedSprite;		 // lines 9-9
class Asset;				 // lines 10-10
class Input;				 // lines 11-11
class Resource;				 // lines 12-12
class Screen;				 // lines 13-13
class Text;					 // lines 14-14
struct JA_Music_t;			 // lines 15-15

class GameOver
{
private:
	// Constantes
	static constexpr int COUNTER_SECTION_END_ = 400; // Contador: cuando acaba la sección
	static constexpr int COUNTER_INIT_FADE_ = 310;	 // Contador: cuando emiepza el fade
	static constexpr int COUNTER_FADE_LENGHT_ = 20;	 // Contador: duración del fade

	// Objetos y punteros
	std::shared_ptr<AnimatedSprite> player_sprite_; // Sprite con el jugador
	std::shared_ptr<AnimatedSprite> tv_sprite_;		// Sprite con el televisor

	// Variables
	int pre_counter_ = 0;		// Contador previo
	int counter_ = 0;			// Contador
	Uint32 ticks_ = 0;			// Contador de ticks para ajustar la velocidad del programa
	std::vector<Color> colors_; // Vector con los colores para el fade
	Color color_;				// Color usado para el texto y los sprites

	// 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() = default;

	// Bucle principal
	void run();
};