#pragma once

#include <SDL2/SDL.h>
#include "utils.h"
#include "text.h"
#include "asset.h"
#include "animatedsprite.h"
#include "const.h"
#include <string>

#ifndef SCOREBOARD_H
#define SCOREBOARD_H

struct board_t
{
	int items;	   // Lleva la cuenta de los objetos recogidos
	int lives;	   // Lleva la cuenta de ls vidas restantes del jugador
	int rooms;	   // Lleva la cuenta de las habitaciones visitadas
	bool music;	   // Indica si ha de sonar la musica durante el juego
	color_t color; // Color para escribir el texto del marcador
	Uint32 iniClock;
};

// Clase ScoreBoard
class ScoreBoard
{
private:
	struct clock_t
	{
		int hours;
		int minutes;
		int seconds;
		std::string separator;
	};

	LTexture *playerTexture;	// Textura con los graficos para las vidas
	AnimatedSprite *sprite;		// Sprite para mostrar las vidas en el marcador
	SDL_Renderer *renderer;		// El renderizador de la ventana
	Asset *asset;				// Objeto con la ruta a todos los ficheros de recursos
	Text *text;					// Objeto para escribir texto
	std::vector<color_t> color; // Vector con los colores del objeto
	int counter;				// Contador interno
	int colorChangeSpeed;		// Cuanto mas alto, mas tarda en cambiar de color
	bool paused;				// Indica si el marcador esta en modo pausa
	Uint32 timePaused;			// Milisegundos que ha estado el marcador en pausa
	Uint32 totalTimePaused;		// Tiempo acumulado en pausa
	clock_t clock;				// Contiene las horas, minutos y segundos transcurridos desde el inicio de la partida
	LTexture *itemTexture;		// Textura con los graficos para las vidas
	board_t *board;				// Contiene las variables a mostrar en el marcador

	// Obtiene el tiempo transcurrido de partida
	clock_t getTime();

public:
	// Constructor
	ScoreBoard(SDL_Renderer *renderer, Asset *asset, board_t *board);

	// Destructor
	~ScoreBoard();

	// Pinta el objeto en pantalla
	void render();

	// Actualiza las variables del objeto
	void update();

	// Recarga la textura
	void reLoadTexture();

	// Pone el marcador en modo pausa
	void pause();

	// Quita el modo pausa del marcador
	void resume();
};

#endif
