#include "mwereader.h"
#include <boost/algorithm/string.hpp>

namespace Corpus2{

bool MWEReader::registered = TokenReader::register_path_reader<MWEReader>(
	"mwereader","inner,mwepath"); // TODO more help?

	MWEReader::MWEReader(const Tagset &tagset, const std::string &filename)
		: TokenReader(tagset), inner_filename_(filename)
	{
		// TODO implementataion
	}

	MWEReader::~MWEReader()
	{
		// TODO implementataion
	}

	Token* MWEReader::get_next_token()
	{
		// TODO MWE stuff
		// get whole sentence -> process it -> return token by token
		return inner_reader_->get_next_token();
	}

	Sentence::Ptr MWEReader::get_next_sentence()
	{
		// TODO MWE stuff
		return inner_reader_->get_next_sentence();
	}

	boost::shared_ptr<Chunk> MWEReader::get_next_chunk()
	{
		// TODO MWE stuff
		// get whole chunk -> process sentences -> return processed chunk
		return inner_reader_->get_next_chunk();
	}

	void MWEReader::set_option(const std::string& option)
	{

		if(boost::algorithm::starts_with(option, "inner:")) {
			std::string inner = option.substr(6);
			inner_reader_ = create_path_reader(inner, this->tagset(),
											   inner_filename_);
		}


		// TODO MWE stuff
	}

	void MWEReader::validate()
	{
		if(inner_reader_ == NULL)
			throw Corpus2Error("Inner reader not initialised.");
		// TODO MWE stuff
	}

	std::string MWEReader::get_option(const std::string& option) const
	{
		if(boost::algorithm::starts_with(option, "inner:")
			&& inner_reader_ != NULL)
			return option;
		// TODO options for MWE
		return inner_reader_->get_option(option);
	}


}// ns Corpus2