#pragma once

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

#ifndef ENEMY_H
#define ENEMY_H

// Estructura para pasar los datos de un enemigo
struct enemy_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
	SDL_Point p1;			// Punto 1 (inicial) de la ruta
	SDL_Point p2;			// Punto 2 (final) de la ruta
};

// Clase Enemy
class Enemy
{
private:
	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_Point p1;			// Punto 1 (inicial) de la ruta
	SDL_Point p2;			// Punto 2 (final) de la ruta
	SDL_Rect collider;		// Caja de colisión

	// Comprueba si ha llegado al limite del recorrido para darse media vuelta
	void checkPath();

public:
	// Constructor
	Enemy(enemy_t enemy);

	// Destructor
	~Enemy();

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

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

	// Devuelve el rectangulo que contiene al enemigo
	SDL_Rect getRect();

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

#endif
