#include <iostream>
#include <cstring>
#include "server/src/server.h"
#include "server/src/handler.h"

using namespace ts::dns;

std::vector<sockaddr_storage> bindings() {
	std::vector<sockaddr_storage> result{};

	{
		sockaddr_in& any_v4{reinterpret_cast<sockaddr_in&>(result.emplace_back())};
		memset(&any_v4, 0, sizeof(sockaddr_in));

		any_v4.sin_family = AF_INET;
		any_v4.sin_port = htons(1222); //htons(53);
		any_v4.sin_addr.s_addr = (1UL << 24U) | 127U;
	}

	return result;
}

int main() {
	std::string error{};

	auto handler = std::make_shared<DNSHandler>();
	WebDNSServer server{handler};

	if(!server.start(bindings(), error)) {
		for(auto& binding : server.bindings())
			std::cout << " - " << binding->error << "\n";
		std::cerr << "Failed to start server: " << error << "\n";
		return 1;
	}

	std::this_thread::sleep_for(std::chrono::seconds{100});
	return 0;
}