#include <iostream>
#include <cstdlib>
#include <time.h>
#include "Log.h"
#include "RingBuffer.h"

const uint32_t FileSize = 10000; // 86400000;
const uint32_t BufferSize = 125;
RingBuffer rb(4000);

uint64_t counter = 0;
uint64_t buffer[BufferSize];

buffers_t aBuffer;

void FillInBuffer()
{
	for (uint32_t i = 0; i < BufferSize; i++)
		buffer[i] = counter++;
}

int main(int argc, char *argv[])
{
	time_t startTime;
	time_t endTime;
    try {
		Log st("/media/disk/barfola", FileSize);
		string s;
		st.comment("This is a char * comment");
		cout << "current run is  " << st.cur_run() << endl;
		cout << "current file is " << st.cur_file() << endl;
		s = "This is a string comment";
		long long totalBytes = 0;
		startTime = time(NULL);
		for (int i = 0; i < 100; i++) {
			FillInBuffer();
			rb.Write(reinterpret_cast<const uint8_t *>(buffer), sizeof(buffer));
			if (rb.ReadSpace() > 1000) {
				rb.ReadVector(aBuffer);
				if (aBuffer.first_segment_length > 0)
					st.save_data(reinterpret_cast<const char*> (aBuffer.first_segment_address),aBuffer.first_segment_length);
				if (aBuffer.second_segment_length > 0)
					st.save_data(reinterpret_cast<const char*> (aBuffer.second_segment_address),aBuffer.second_segment_length);
				rb.ReadAdvance(rb.ReadSpace());
			}
			totalBytes += FileSize;
			st.comment(s);
		}
		endTime = time(NULL);
		int seconds = difftime(endTime,startTime);
		cout << "Wrote " << totalBytes << " in " << seconds << " seconds." << endl;
		cout << "Megabytes/sec = " << (totalBytes/seconds) / 1000000;

    } catch (string e) {
		cerr << e << endl;
		exit(1);
    }
}

