#include "cdutils_k.h"
#include "cdutils_core.h"
#include "cdtest.h"
#include "pip.h"

using namespace CDUtils;

class Core : public PIObject
{
	PIOBJECT(Core)
	public:
		Core() {
//		piCout << "testCore";
		CONNECTU(&t, tickEvent, this, timerDone);
		t.start(1000);
	}

	void load() {
		rf.open("k.dat", PIIODevice::ReadWrite);
		K.read(&rf);
		rf.close();
	}

	void save() {
		rf.open("k_out.txt", PIIODevice::ReadWrite);
		rf.resize(0);
		K.write(&rf);
		rf.close();
//		rf.open("k_out.txt", PIIODevice::ReadWrite);
//		K.read(&rf);
//		rf.close();
//		rf.open("k_out2.txt", PIIODevice::ReadWrite);
//		rf.resize(0);
//		K.write(&rf);
//		rf.close();
//		rf.open("k_out2.txt", PIIODevice::ReadWrite);
//		K.read(&rf);
//		rf.close();
//		rf.open("k_out3.txt", PIIODevice::ReadWrite);
//		rf.resize(0);
//		K.write(&rf);
//		rf.close();
	}

	void test() {
		piCout << "count" << K.count();
		piCout << K[First];
		piCout << K[Second];
	}

	EVENT_HANDLER(void, ksend) {piCout << "sended k";}
	EVENT_HANDLER(void, krecv) {piCout << "received k";}
	EVENT_HANDLER(void, timerDone) {test();}

private:
	PIFile rf;
	PITimer t;
};


#include "piscreen.h"
#include "piscreentiles.h"
PIScreen screen(false);
int main(int argc, char *argv[]) {
//	PIString s;
//	s = "df a)))(a(ttt){a(b(c)})d)e( d dws ) sds(()fads(fdas()))fda))))fdasf((((jhvw";
//	piCout << s;
//	piCout << s.inBrackets('(', ')');
//	piCout << s.cutLeft(s.find('(')).takeRange('(', ')');
//	piCout << s;
//	piCout << "exit";
//	s = "test";
//	PIByteArray ba = s.toByteArray();
//	piCout << PIString(ba);
//	piCout << PIString(ba.toHex());
//	piCout << PIString(ba.fromHex(PIString(ba.toHex())));
//	PIByteArray ba = s.toByteArray();
//	piCout << PIString(ba);
//	piCout << PIString(ba.convertToBase64());
//	piCout << PIString(ba.convertFromBase64());
//	s = "dGVzdA==";
//	ba = s.toByteArray();
//	piCout << PIString(ba);
//	piCout << PIString(ba.convertFromBase64());
//	return 0;
//	int i = 0;
//	piCout << i++ << "!" << s << "!";
//	piCout << i << "!" << s.trimmed() << "!";
//	piCout << i << "!" << s.trim() << "!";
//	s = "";
//	piCout << i++ << "!" << s << "!";
//	piCout << i << "!" << s.trimmed() << "!";
//	piCout << i << "!" << s.trim() << "!";
//	s = " ";
//	piCout << i++ << "!" << s << "!";
//	piCout << i << "!" << s.trimmed() << "!";
//	piCout << i << "!" << s.trim() << "!";
//	s = "  ";
//	piCout << i++ << "!" << s << "!";
//	piCout << i << "!" << s.trimmed() << "!";
//	piCout << i << "!" << s.trim() << "!";
//	s = " s ";
//	piCout << i++ << "!" << s << "!";
//	piCout << i << "!" << s.trimmed() << "!";
//	piCout << i << "!" << s.trim() << "!";
//	s = "f  s  ";
//	piCout << i++ << "!" << s << "!";
//	piCout << i << "!" << s.trimmed() << "!";
//	piCout << i << "!" << s.trim() << "!";
//	s = "   kjdfsnfv;kjsfd   ";
//	piCout << i++ << "!" << s << "!";
//	piCout << i << "!" << s.trimmed() << "!";
//	piCout << i << "!" << s.trim() << "!";
//	return 0;
//	PIEthernet eth;
//	eth.send("127.0.0.1:16102", PIByteArray("data\n", 5));
//	eth.send("127.0.0.1:26102", PIByteArray("data\n", 5));
//	eth.send("127.0.0.1:36102", PIByteArray("data\n", 5));
	/*PIString s; = "[k]\n\
				 1.f = 120+3 #s comment\n\
				 1.v = 123\n\
				 2.f = 2 #s comm\n\
				 2.v = 1\n\
				 4.f = -6/10 #s mment\n\
				 4.v = -0.6\n\
				 [s.10.k]\n\
				 5.f = 2*2*2\n\
				 5.v = 8 #s 88\n\
				 [s.10.s.50.k]\n\
				 100.f = 2*2*2\n\
				 100.v = 8 #s 88\n\
				 [s.11.k]\n\
				 3.f = 1\n\
				 3.v = 1 #s 88 \n\
				 4.f = 0\n\
				 4.v = 0 #s 88 \n\
				 6.f = 0\n\
				 6.v = 0 #s 881 \n\
				 []\n";
	PIIOString ios(&s);
	CDUtils::K.read(&ios);

	s.clear();
	PIIOString iosw(&s);
	CDUtils::K.write(&iosw);
	piCout << s;*/
//	piCout << K.count();
//	PIFile rf("1.txt", PIIODevice::ReadWrite);
//	K.read(&rf);

//	PIFile f;
//	f.open("SH_base.h", PIIODevice::ReadOnly);
//	CDUtils::K.update(&f);

//	PIFile wf("2.txt", PIIODevice::ReadWrite);
//	CDUtils::K.write(&wf);
	//PIIOString iosw(&s);
	//piCout << s;
	//piMSleep(1000);
	//CDUtils::Core::instance()->test();
	//return 0;
//	piCout << "init";
	screen.rootTile()->addTile(new TilePICout());
	screen.enableExitCapture('q');
//	piMSleep(3000);
	screen.start();
	piCout << "start";
	Core core;
	core.load();
//	core.save();
//	K.send();


	screen.waitForFinish();
	return 0;
}

