#include "DapChainLogHandler.h"

#include <QRegularExpression>

DapChainLogHandler::DapChainLogHandler(QObject *parent) : QObject(parent)
{
    m_fileSystemWatcher.addPath(LOG_FILE);

    connect(&m_fileSystemWatcher, &QFileSystemWatcher::fileChanged, this, [=] (const QString& asFile) {
        Q_UNUSED(asFile)
        m_fileSystemWatcher.addPath(LOG_FILE);
        emit onChangedLog();
    });
}

QStringList DapChainLogHandler::request()
{
    QFile file(LOG_FILE);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        qWarning() << "Failed to open file " << file.fileName();
        return QStringList();
    }
    else
    {
        QTextStream in(&file);
        in.seek(m_currentCaretPosition);
        const QRegularExpression re("(\\[\\d\\d\\/\\d\\d\\/\\d\\d\\-\\d\\d\\:\\d\\d\\:\\d\\d])\\s(\\[\\w+\\])\\s(\\[\\w+\\])(.+)");

        QStringList listLogs;
        while (!in.atEnd()) {
            const QString line = in.readLine();
            const auto match = re.match(line);
            if(!match.hasMatch())
                continue;

            const QString matchedLog = match.captured();
            listLogs.append(matchedLog);
            m_currentCaretPosition += matchedLog.length();
        }

        return listLogs;

    }
}