
#ifndef ENNEMYMANAGER_H
#define ENNEMYMANAGER_H

#include <vector>
#include "GroundArmyInfo.h"
#include "EnnemyUnit.h"
#include "GroupEnnemy.h"
#include "Point2D.h"

#include "MemoryManager/DebugNew.h"

class EnnemyManager
{
private:

	/**
	* Le vecteur contenant les groupes d'unités vivantes ET visibles
	*/
	std::vector<GroupEnnemy*> groups;

	/**
	 * vecteur contenant TOUTES les unités ennemies.
	 */
	std::vector<EnnemyUnit*> allAliveEnnemies;
	/**
	* Le groupe d'unité morte
	*/
	GroupEnnemy deadEnnemies;

	GroupEnnemy hiddenEnnemies;

	/**
	* la réference sur l'information de l'armée
	*/
	ground::GroundArmyInfo& groundArmyInfo;

	/**
	* Permet de récupérer le groupe de l'unite selectionnee
	* Parcourt tous les groupes de groups
	*
	* @param unit : l'unite selectionnee
	* @return le groupe de l'unite selectionnee
	*/
	GroupEnnemy* getGroupByUnit(EnnemyUnit* unit);


public:
	EnnemyManager(ground::GroundArmyInfo& gai);

	virtual ~EnnemyManager();

	/**
	* Permet de récupérer les groupes en intersection avec une zone circulaire
	*
	* @param pt : le centre de la zone circulaire
	* @param radius : le rayon de la zone circulaire
	* @return un vecteur des groupes contenus dans la zone circulaire
	*/
	std::vector<GroupEnnemy*> getCloseGroups(Point2D& pt, float radius);

	/**
	* Permet de récupérer le groupe le plus proche d'un point
	*
	* @param pt : le point de controle
	* @return un pointeur sur le groupe le plus proche. null si aucune unité visible.
	*/
	GroupEnnemy* getClosestGroup(Point2D& pt);

	/**
	* Update les unités connues mortes, les groupEnnemy....
	*/
	void update();

	/**
	* 
	*/
	int getVisible();

	/**
	* 
	*/
	int getAlive();

	/**
	 * Get closest ennemy unit from given point
	 *
	 * @param pt Point from which to calculate the distance
	 * @param range Range in which any ennemy is "ok"
	 * @param move Distance we authorize the unit for moving
	 * @return Ennemy in range
	 */
	EnnemyUnit* getEnnemyInRange (Point2D pt, float range, float move = 0.f);

	void addEnnemy(EnnemyUnit* ennemy);
};

#include "MemoryManager/DebugNewOff.h"

#endif
