#include "EntityMap.h"
#include <iostream>

EntityMap::EntityMap()
{
}

EntityMap::EntityMap(std::vector<std::shared_ptr<Entity>>)
{
}

EntityMap::~EntityMap()
{
}

void EntityMap::addEntity(Entity ent)
{
	std::shared_ptr<Entity> ent_ptr = std::make_shared<Entity>(ent);
	entities.push_back(ent_ptr);
}

std::shared_ptr<Entity> EntityMap::getEntityByFaceTopologyId(int ti)
{
	for (auto ent : entities)
	{
		if (ent->getDimension() == Entity::AREA)
		{
			for (auto topoId : ent->getTopologyIds())
			{
				if (topoId == ti)
					return ent;
			}
		}
	}
	return nullptr;
}

std::shared_ptr<Entity> EntityMap::getEntityBySolidTopologyId(int ti)
{
	for (auto ent : entities)
	{
		if (ent->getDimension() == Entity::VOLUME)
		{
			for (auto topoId : ent->getTopologyIds())
			{
				if (topoId == ti)
					return ent;
			}
		}
	}
	return nullptr;
}

std::shared_ptr<Entity> EntityMap::getEntityByName(std::string nm)
{
	for (auto& ent : entities)
	{
		if (ent->getName() == nm)
			return ent;
	}
	return nullptr;
}

std::vector< std::shared_ptr<Entity>> EntityMap::getEntities()
{
	return entities;
}

int EntityMap::size()
{
	return entities.size();
}

void EntityMap::print()
{
	std::cout << " PRINT ENTITY MAP " << std::endl;
	for (auto ent : entities)
	{
		std::cout << "Entity " << ent->getName() << "      ::      " << ent->getId() << ". Type : " << ent->getEntityType() << std::endl;
		std::cout << "Topology ids : ";
		for (auto tid : ent->getTopologyIds())
			std::cout << tid << " ";
		std::cout << "." << std::endl;
	}
}