#include "domainGroup.h"
#include "ShapeAlgorithms.h"
#include "vtkForCenos/topologyToVTK.h"
#include "ShapePartition.h"

DomainGroup::DomainGroup(json inp_json, std::vector<std::shared_ptr<TopoEntity>> ents) : Group(inp_json, ents)
{
	in_group = "";
}

DomainGroup::DomainGroup() : Group()
{
	in_group = "";
}


json DomainGroup::getJson()
{
	json out_json = Group::getJson();
	ShapeStats stat;
	ShapeAlgorithms::getShapeStatistics(&shape, stat);
	out_json["statistics"] = stat.getJson();
	json boundary_json = json::array();
	json indefinite_json = json::array();
	for (auto bnd : boundaries)
	{
		boundary_json.push_back(bnd->getName());
	}
	out_json["boundaries"] = boundary_json;
	out_json["group"] = in_group;
	return out_json;
}

void DomainGroup::setBoundary(std::shared_ptr<BoundaryGroup> bnd)
{
	if (std::find_if(boundaries.begin(), boundaries.end(), [bnd](const std::shared_ptr<BoundaryGroup>& b) { return b->getName() == bnd->getName(); }) == boundaries.end())
	{
		boundaries.push_back(bnd);
		return;
	}
}

std::vector<std::shared_ptr<BoundaryGroup>> DomainGroup::getBoundaries()
{
	return boundaries;
}

void DomainGroup::clearBoundaries()
{
	boundaries.clear();
}

void DomainGroup::setInGroup(std::string g)
{
	in_group = g;
}