#include "worker.h"
#include "TSystem.h"
#include <QFile>
#include <QString>
#include <QTextStream>
#include <QDebug>

void Worker::run()
{
    // simulate some cones
    // or import cones from file
    QFile conefile(config->conefilePath.c_str());
    if (!conefile.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        throw std::invalid_argument("Cannot find file: " + config->conefilePath);
    }

    QString line;
    QTextStream in(&conefile);
    // skip header (first line)
    in.readLineInto(&line);
    ulong counts(0);
    while(!stop) {
        //some work to get data (read board or file)
        int i(0);
        while (!stop && i < config->chuckSize && in.readLineInto(&line))
        {
            coneQueue->enqueue(Cone(line));
            i++;
        }
        counts+=i;
        if (stop || line.isNull() || counts >= config->maxN)
        {
            break;
        }

        while (!stop && coneQueue->size_approx() >= config->capacity)
        {
            gSystem->Sleep(50);
        }
    }
    conefile.close();
    qDebug() << "Worker thread exited.";
}

void Worker::stopExecution()
{
    stop = true;
}