
#ifndef SERVERCONFIG_HPP
# define SERVERCONFIG_HPP

# include "utils.hpp"
# include "LocationConfig.hpp"

# include <map>
# include <vector>
# include <string>			// string
# include <iostream>		// cout, cin

// a class that's all public? just so we have options?
class ServerConfig
{
public:

	// do i need some canonic stuff?


	// there can be several
	std::vector<std::string>	server_name;
	// we could shove default in here if we wanted to...

	// there can only be 1 per server...
	std::string	host;
	std::string	port;	// port needs to be something else... not quite an int
	// should a Server be able to handle several?

	// there can only be one.
	std::string	root;
	
	unsigned int	client_body_limit;	// set to default max if none set

	// might be the only one we let slide if bad input...
	bool		autoindex;

	// we will check the index in the post processing with access() ?
	std::vector<std::string>	index;
	std::map<int, std::string>	error_pages;

	// i'm tempted to do something diff for storing method types...
	// fuck it, you can only call allow_methods once in Server
		// once more in each location.
	std::vector<http_method>		allow_methods;

	std::vector<LocationConfig>		locations;

	// not convinced we need these...
//	struct timeval	send_timeout;
//	struct timeval	recv_timeout;


// fuck maybe i do need return here...
	// wait if i can call several times, shouldn't it be a map?
// i think actually there can only be 1 and it can only be in a location?
//	int			redirect_status;
//	std::string	redirect_uri;

	void	print_all()
	{
		std::cout << "PRINTING A FULL SERVER CONFIG\n\n";

		for (size_t i = 0; i < server_name.size(); i++)
			std::cout << server_name[i] << " ";
		std::cout << "root: " << root << '\n';
		std::cout << "index: ";
		for (size_t i = 0; i < index.size(); i++)
			std::cout << index[i] << " ";
		std::cout << "\nerror_pages: ";
		for(std::map<int, std::string>::iterator it = error_pages.begin(); \
			it != error_pages.end(); it++)
			std::cout << it->first << "--" << it->second << " ";
//		for (size_t i = 0; i < error_pages.size(); i++)
//			std::cout << error_pages->first << "--" << error_pages->second << " ";
		std::cout << "\nallow_methods: ";
		for (size_t i = 0; i < allow_methods.size(); i++)
			std::cout << allow_methods[i] << " ";
		std::cout << "\nskiping Locations for now...\n";
		std::cout << "also skiping send_timeout and recv\n";
		std::cout << "autoindex: " << autoindex << '\n';
		std::cout << "client_body_limit: " << client_body_limit << '\n';
	//	std::cout << "redirect_status: " << redirect_status << '\n';
	//	std::cout << "redirect_uri: " << redirect_uri << '\n';
		std::cout << "host: " << host << '\n';
		std::cout << "port: " << port << '\n';

		std::cout << "\n----------\n";
	}
};

#endif

