/*
    Copyright (C) 2012 Bartosz Broda, Jacek Bochenek, Łukasz Biłeńkij, 
    Damian Jaworski, Wojciech Mazur, Dominik Piasecki, Maciej Piasecki, 
    Radosław Ramocki
    
    This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option)
any later version.

    This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. 

    See the LICENSE and COPYING files for more details.
*/

#ifndef WBST_OPTIONS_H
#define WBST_OPTIONS_H

#include "wbst_headers.h"
#include "question.h"

namespace wbst
{
	class WBSTOptions
	{
		public:
			WBSTOptions(int argc, char* argv[]);

			std::vector< std::string > & GetFunctions();
			std::vector< std::pair<std::string, std::string> >& GetPathToMatrixVector();
			std::vector< std::vector<WBSTQuestion> > & GetQuestions();
			std::vector<std::string>  GetWBSTFiles();

			size_t GetNumberOfThreads() const;
			std::string GetOutDir() const;
			size_t GetTFThreshold() const;
			std::map<std::string, size_t> GetUDict() const;
			const std::string & GetFlexClass() const;
			bool GetLoadCCS() const;
			
		private:
			std::vector<std::string> m_vWBSTFiles;
			std::vector<std::string> m_vMatricesPaths;
			std::vector<std::string> m_vFunctions;
			std::vector< std::pair<std::string, std::string> > m_vPathToMatrix;
			size_t m_cThreads;
			std::vector<std::vector<WBSTQuestion> > m_vQuestions;
			std::string m_sOutDir;
			std::string m_sConfigFile;
			std::string m_sFlexClass;
			bool m_bLoadCCS;

			void InitalizeOptions(int argc, char*argv[]);
			void ParseOptions();
			void LoadWBSTFiles();
			void CheckMatrices();
			void CheckFunctions();

			boost::program_options::options_description m_Options;
			boost::program_options::variables_map m_VarMap;
	};

}//namespace wbst

#endif //WBST_OPTIONS_H

