#pragma once

#include <SDL2/SDL_rect.h>    // for SDL_Rect, SDL_Point
#include <SDL2/SDL_render.h>  // for SDL_Renderer
#include <string>             // for basic_string, string
#include <vector>             // for vector
#include "utils.h"            // for color_t
class Sprite;
class Texture;

struct item_t
{
	SDL_Renderer *renderer;	 // El renderizador de la ventana
	Texture *texture;		 // Textura con los graficos del item
	std::string tileSetFile; // Ruta al fichero con los graficos del item
	int x;					 // Posicion del item en pantalla
	int y;					 // Posicion del item en pantalla
	int tile;				 // Numero de tile dentro de la textura
	int counter;			 // Contador inicial. Es el que lo hace cambiar de color
	color_t color1;			 // Uno de los dos colores que se utiliza para el item
	color_t color2;			 // Uno de los dos colores que se utiliza para el item
};

class Item
{
private:
	// Objetos y punteros
	Sprite *sprite; // Sprite del objeto

	// Variables
	std::vector<color_t> color; // Vector con los colores del objeto
	int counter;				// Contador interno
	SDL_Rect collider;			// Rectangulo de colisión
	int colorChangeSpeed;		// Cuanto mas alto, mas tarda en cambiar de color

public:
	// Constructor
	Item(item_t item);

	// Destructor
	~Item();

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

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

	// Obtiene el rectangulo de colision del objeto
	SDL_Rect &getCollider();

	// Obtiene su ubicación
	SDL_Point getPos();

	// Recarga la textura
	void reLoadTexture();

	// Asigna los colores del objeto
	void setColors(color_t col1, color_t col2);
}