#include "rosa/agent/experimental/CSV_Writer.hpp"
//#include <string>
//#include <iostream>

#define STRINGLENGTH 5000

void CSV_Writer :: initialize_csv_writer(char* filepath_write) {
	//fpointer_write = fopen(filepath_write, "w");
#if defined (_WIN64) || (__WIN32__) || (_WIN32)                 
    fopen_s(&fpointer_write, filepath_write, "w");
#elif defined(__linux__)
    fpointer_write = fopen(filepath_write, "w");
    if (fpointer_write == NULL) {
        printf("Parth: %s not found \n", filepath_write);
    }
#endif 
	//if (fpointer_write == NULL) {
		//printf("Path: %s", filepath_write);
	//}
}

CSV_Writer :: CSV_Writer(char* filepath_write) {
	set_name((char *)NO_NAME);
	initialize_csv_writer(filepath_write);
}

CSV_Writer :: CSV_Writer(char* name, char* filepath_write) {
	set_name(name);
	initialize_csv_writer(filepath_write);
}



bool CSV_Writer :: write_field(int dataset) {
	if(fpointer_write) {
		fprintf(fpointer_write, "%i", dataset);		
		return true;
	}
	return false;
}

bool CSV_Writer :: write_field(float dataset) {
	if(fpointer_write) {
		fprintf(fpointer_write, "%f", dataset);		
		return true;
	}
	return false;
}

bool CSV_Writer :: write_field(char* dataset) {
	if(fpointer_write) {
		fprintf(fpointer_write, "%s", dataset);		
		return true;
	}
	return false;
}

bool CSV_Writer :: make_new_field() {
	if(fpointer_write) {
		fprintf(fpointer_write, ",");		
		return true;
	}
	return false;
}

bool CSV_Writer :: make_new_line() {
	if(fpointer_write) {
		fprintf(fpointer_write, "\n");	
		return true;
	}
	return false;
}


bool CSV_Writer :: write_row_data(unsigned int num_of_datasets, float* datasets) {
	
	if(fpointer_write) {
		for(unsigned int d_ix=0; d_ix<num_of_datasets; d_ix++) {
			fprintf(fpointer_write, "%f", datasets[d_ix]);
			if(d_ix < num_of_datasets-1)
				fprintf(fpointer_write, ",");
		}
		fprintf(fpointer_write, "\n");		
		return true;
	}
	return false;
}

void CSV_Writer :: close_file() {
	if(fpointer_write)
		fclose(fpointer_write); 
}
