#include "CSVReader.h"
#include <sstream>
#include <algorithm>

// Erstellt den Leser
//  path: Der Pfad der CSV Datei
CSVReader::CSVReader( std::string path )
    : stream( path )
{
    stream.seekg( 0, std::ios_base::end );
    byteCount = stream.tellg();
    stream.seekg( 0, std::ios_base::beg );
}

// Gibt die nächste Zeile der CSV Datei zurück
std::vector< std::string > CSVReader::getNextRow()
{
    std::string line;
    int tmp = stream.tellg();
    std::getline( stream, line );
    line.erase(std::remove(line.begin(), line.end(), '\n'), line.end());
    byteCount -= (int)stream.tellg() - tmp;
    std::stringstream lineStream( line );
    std::vector< std::string > result;
    std::string cell;
    while(std::getline(lineStream,cell, ';'))
        result.push_back(cell);
    return result;
}

// Gibt true zurück, falls es noch eine Zeile gibt
bool CSVReader::hasNext() const
{
    return stream && !stream.eof() && byteCount > 0;
}

// Gibt den Fortschritt des lesens in Prozent zurück
int CSVReader::getProgress()
{
    return (int)(((int)stream.tellg() / ((int)stream.tellg() + (double)byteCount)) * 100);
}