#include <string>
#include <vector>
#include <Component.h>

using namespace std;

#ifndef _Profile
#define _Profile

enum argvOpt { PROJECTION, TRIANGLE };

class Profile
{
private:
	string fileName_;
	string title_;

	vector <string> argvComps_;	// this are the strings passed by argument to set the projections components
	vector <argvOpt> argvTypes_;	// this are the projections type determined by the option parameters -p ou -t
	vector <string> argvColors_;	// these are the colors passed by argumente to set the color of each component

	vector <Component *> inputComps_;// components read from input file
	int nComps_;		// number of uniq components including x read from input file
	int nSteps_;		// number of steps read from input file
	int gridSize_;		// grid size read from input file

	int index_;
	int legendPos_;
	bool decoration_;
	bool grid_;
	bool verbose_;
	bool debug_;
	float border_;
	float lineWidth_;

	vector <string> frame_;

	int extractComponents(void);
	void extractColors(string);
	int readFile(void);

public:
	Profile(int argc, char **argv);

	// Acessors
	string fileName(void);
	string title(void);

	string argvComp(int);
	argvOpt argvType(int);
	int nProjs(void);

	vector <Component *> &inputComps(void);
	Component * inputComp(int i);
	int nComps(void);
	int nSteps(void);
	int gridSize(void);

	int index(void);
	int legendPos(void);
	string legend(void);
	bool decoration(void);
	bool grid(void);
	bool verbose(void);
	bool debug(void);
	float border(void);
	float lineWidth(void);

	// Mutators
	void index(int);
	void decoration(bool);
	void grid(bool);
	void border(float);
	void lineWidth(float);
	void toggleLegend(void);
	void toggleDecoration(void);
	void toggleGrid(void);
	void toggleVerbose(void);
	void printUsage(int);

	string frame(int);

};

#endif
