
#include <iostream>
#include <exception>
#include <stdexcept>
#include "Webserv.hpp"
#include "ConfigParser.hpp"

int	main(int ac, char **av)
{
	try
	{
		std::string	config = (ac == 2 ? av[1] : "./default.config");

	// like this just looks kinda gross, why bother creating an instance
	// and not immediately parsing? like it servers no other purpose...
	// what if i call parse directly in the constructor?
	// oh because the constructor has no return, but still
	// is there a better way?

		ConfigParser	configParser(config.c_str());

		configParser._print_content();

		// i don't love that servers has to be a pointer...
		std::vector<ServerConfig>* servers = configParser.parse();
		
	// use an iterator you moron
		for (std::vector<ServerConfig>::iterator it = servers->begin(); it < servers->end(); it++)
		{
		//	std::cout << it->server_name << " ";
			it->print_all();
		}


//		Webserv	serv(configParser.parse());
	// is this better or worse than using 

		Webserv	serv;

		// serv.init_virtual_servers();
		serv.init_virtual_servers(servers);
		delete servers;
		serv.run();
	}
	catch (std::exception& e)
	{
		std::cout << e.what() << '\n';
	}
	
	return (0);
}
