#include <QDateTime>
#include "Runner.h"
#include "Ping.h"

Runner::Runner(QList<QString> pingHosts) :
    pingHosts_p(pingHosts)
{
}

void Runner::refresh()
{
    QMutexLocker locker(&mutex);
    refreshed_p = QDateTime::currentDateTimeUtc().toTime_t();
}

uint Runner::refreshed()
{
    QMutexLocker locker(&mutex);
    return refreshed_p;
}

const QString Runner::currentHost()
{
    QMutexLocker locker(&mutex);
    return currentHost_p;
}

const QMap<QString, double> Runner::pingData()
{
    QMutexLocker locker(&mutex);
    return pingData_p;
}

void Runner::setCurrentHost(const QString &currentHost)
{
    QMutexLocker locker(&mutex);
    currentHost_p = currentHost;
}

void Runner::setPingData(const QMap<QString, double> &pingData)
{
    QMutexLocker locker(&mutex);
    pingData_p = pingData;
}

void Runner::run()
{
    // Ping data initialisation
    QMap<QString, double> pingData_l;
    for (const QString &host : pingHosts_p) {
        pingData_l.insert(host, -1);
    }
    setPingData(pingData_l);
    refresh();

    forever {
        if (QThread::currentThread()->isInterruptionRequested()) {
            return;
        }
        for (const QString &host : pingHosts_p) {
            setCurrentHost(host);
            refresh();
            double ping = Ping::ping(host, 3);
            pingData_l[host] = ping;
            setPingData(pingData_l);
            refresh();
        }
    }
}