#pragma once

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

struct item_t
{
	SDL_Renderer *renderer;	 // El renderizador de la ventana
	Texture *texture;		 // Textura con los gráficos del item
	std::string tileSetFile; // Ruta al fichero con los gráficos del item
	int x;					 // Posición del item en pantalla
	int y;					 // Posición del item en pantalla
	int tile;				 // Número de tile dentro de la textura
	int counter;			 // Contador inicial. Es el que lo hace cambiar de color
	Color color1;			 // Uno de los dos colores que se utiliza para el item
	Color color2;			 // Uno de los dos colores que se utiliza para el item

	// Constructor por defecto
	item_t() : renderer(nullptr), texture(nullptr), x(0), y(0), tile(0), counter(0), color1(), color2() {}
};

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

	// Variables
	std::vector<Color> 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 col1, Color col2);
};