#include "boundaryGroup.h"
#include "ShapeAlgorithms.h"
#include "vtkForCenos/topologyToVTK.h"
#include "ShapePartition.h"


void BoundaryGroup::unsetIsindomain()
{
	isindomain = false;
}

void BoundaryGroup::setIsindomain()
{
	isindomain = true;
}

bool BoundaryGroup::getIsindomain()
{
	return isindomain;
}

BoundaryGroup::BoundaryGroup(json inp_json, std::vector<std::shared_ptr<TopoEntity>> ents): Group(inp_json, ents)
{
	is_indefinite = false;
}

BoundaryGroup::BoundaryGroup(): Group()
{
	is_indefinite = false;
	isindomain = false;
}

bool BoundaryGroup::isSubShapeOf(Group gd)
{
	TopoEntity checkboundary(this->getShape(), "dummyboundary");

	return checkboundary.isSubShapeOf(gd.getShape());
}

void BoundaryGroup::setDomain(std::shared_ptr<Group> dom)
{
	if (std::find_if(domains.begin(), domains.end(), [dom](const std::shared_ptr<Group>& d) { return d->getName() == dom->getName(); }) == domains.end())
	{
		domains.push_back(dom);
		return;
	}
}

bool BoundaryGroup::isIndefinite()
{
	return is_indefinite;
}

void BoundaryGroup::setIndefinite(bool b)
{
	is_indefinite = b;
}


json BoundaryGroup::getJson()
{
	json out_json = Group::getJson();
	json domains_json = json::array();
	for (auto dom : domains)
		domains_json.push_back(dom->getName());
	out_json["domains"] = domains_json;
	out_json["isInDomain"] = isindomain;
	return out_json;
}

void BoundaryGroup::clearDomains()
{
	domains.clear();
}