#include <loguru.hpp>
#include <nlohmann/json.hpp>
#include <ftl/codecs/shapes.hpp>
#include <ftl/streams/filestream.hpp>

#include "inputoutput.hpp"

using ftl::gui2::InputOutput;

using ftl::codecs::Channel;

InputOutput::InputOutput(ftl::Configurable *root, ftl::net::Universe *net) :
		net_(net) {

	master_ = std::unique_ptr<ftl::ctrl::Master>(new ftl::ctrl::Master(root, net));
	master_->onLog([](const ftl::ctrl::LogEvent &e){
		const int v = e.verbosity;
		switch (v) {
		case -2:	LOG(ERROR) << "Remote log: " << e.message; break;
		case -1:	LOG(WARNING) << "Remote log: " << e.message; break;
		case 0:		LOG(INFO) << "Remote log: " << e.message; break;
		}
	});

	//net_->onConnect([this](ftl::net::Peer *p) {
		//ftl::pool.push([this](int id) {
			// FIXME: Find better option that waiting here.
			// Wait to make sure streams have started properly.
			//std::this_thread::sleep_for(std::chrono::milliseconds(100));

			//_updateCameras(screen_->net()->findAll<string>("list_streams"));
		//});
	//});

	feed_ = std::unique_ptr<ftl::stream::Feed>
		(ftl::create<ftl::stream::Feed>(root, "feed", net));

	speaker_ = feed_->speaker();

	//auto* f = feed_->filter({ftl::codecs::Channel::Colour, ftl::codecs::Channel::Depth});
	//feed_->render(f, Eigen::Matrix4d::Identity());
}