#include <map>
#include "BasicTemplate.h"
#include <TopTools_ListOfShape.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS_Solid.hxx>

class WorkpieceTemplate : public BasicTemplate
{
public:
	WorkpieceTemplate(std::string path);

	void parseInputJSON(json* j);
	void generateGeometry();
	void assignMeshSizes(MeshGenerator_, GeometryData_, double, double);
	bool validate(std::string&);

private:
	double workpiece_diameter;
	double workpiece_height;
	double diameter1;
	double diameter2;
	double height1;
	double height2;

	enum workpieceType {
		BILLET,
		STEPPED_SHAFT,
		TUBE,
		SHAFT_END
	};

	workpieceType wp_type;

	TopoDS_Face makeBillet(TopTools_ListOfShape&, TopTools_ListOfShape&);
	TopoDS_Face makeTube(TopTools_ListOfShape&);
	TopoDS_Face makeSteppedShaft(TopTools_ListOfShape&, TopTools_ListOfShape&);
};