#pragma once

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

#ifndef ACTOR_H
#define ACTOR_H

// Nombres de actores
enum actor_name_e
{
	a_moving_platform,
	a_key,
	a_heart,
	a_diamond,
	a_door
};

// Estructura para pasar los datos de un enemigo
struct actor_t
{
	SDL_Renderer *renderer; // El renderizador de la ventana
	Asset *asset;			// Objeto con la ruta a todos los ficheros de recursos
	std::string tileset;	// Fichero con los graficos del enemigo
	std::string animation;	// Fichero con las animaciones del enemigo
	int w;					// Anchura del enemigo
	int h;					// Altura del enemigo
	float x;				// Posición inicial en el eje X
	float y;				// Posición inicial en el eje Y
	float vx;				// Velocidad en el eje X
	float vy;				// Velocidad en el eje Y
	actor_name_e name;		// Nombre del actor
};

// Clase Actor
class Actor
{
protected:
	SDL_Renderer *renderer; // El renderizador de la ventana
	Asset *asset;			// Objeto con la ruta a todos los ficheros de recursos
	LTexture *texture;		// Textura con los graficos del enemigo
	AnimatedSprite *sprite; // Sprite del enemigo
	SDL_Rect collider;		// Caja de colisión
	actor_name_e name;		// Nombre del actor

public:
	// Constructor
	Actor();
	Actor(actor_t actor);

	// Destructor
	virtual ~Actor();

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

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

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

	// Obtiene el nombre del actor
	actor_name_e getName();

	// Obtiene el valor de la variable
	int getIncX();
};

#endif
