
#include "ConfigParser.hpp"

// should i be sending & references?
// const?
std::string	ConfigParser::_pre_set_val_check(const std::string key,
			const std::string value)
{

	// check key for ;
	// check values for ; at end and right number of words depending on key

//	std::cout << "pre check\n";
	if (key.find_first_of(";") != NPOS)
		throw std::invalid_argument("bad config file arguments");

	if (value.find_first_of("\t") != NPOS)
		throw std::invalid_argument("why would you put tabs between values");

	size_t	i = value.find_first_of(";");
	// so you can't have no ;
	// you can't have just ;
	// and you can't have a ; not at the end or several ;
	// in theory value_find_last_of should find the only ;
	if (i == NPOS || (value.find_last_not_of(" \n")) != i \
		|| value.compare(";") == 0)
		throw std::invalid_argument("bad config file arguments");


	return (value.substr(0, i));
}

// const?
// assumes curr is on a space or \t or \n
std::string	ConfigParser::_get_first_word(size_t *curr)
{
	size_t	start;

	if ((start = _content.find_first_not_of(" \t\n", *curr)) == NPOS)
		throw std::invalid_argument("bad config file arguments");
	if ((*curr = _content.find_first_of(" \t\n", start)) == NPOS)
		throw std::invalid_argument("bad config file arguments");

	std::string	key = _content.substr(start, *curr - start);
	return (key);
}

// const?
// also assumes curr is on a space \t or \n
std::string	ConfigParser::_get_rest_of_line(size_t *curr)
{
	size_t	start;

	if ((start = _content.find_first_not_of(" \t\n", *curr)) == NPOS)
		throw std::invalid_argument("bad config file arguments");
	if ((*curr = _content.find_first_of("\n", start)) == NPOS)
		throw std::invalid_argument("bad config file arguments");

	std::string	values = _content.substr(start, *curr - start);
	return (values);
}


void	ConfigParser::print_content() const
{
	std::cout << _content;
}

