#pragma once

#include <QEvent>
#include <QLoggingCategory>
#include <QMetaProperty>
#include <QMouseEvent>
#include <QObject>
#include <QQuickWindow>
#include <QVariant>
#include <QtQuickControls2/QtQuickControls2>

#include "aqsi-commons-qt_global.h"

namespace aqsi {

class AQSICOMMONSQT_EXPORT EventLogger : public QObject
{
    Q_OBJECT
    Q_LOGGING_CATEGORY(cat_user, "aqsi.user")

public:
    Q_DISABLE_COPY_MOVE(EventLogger);

    Q_INVOKABLE void installEventFilterTo(QObject* object);

    Q_INVOKABLE void installEventFilterRecursivelyTo(QObject* object);

    Q_INVOKABLE void setScreen(QString const& screen_name);

    bool eventFilter(QObject* obj, QEvent* event) override;

    static EventLogger& instance();

private:
    EventLogger() = default;

    QString m_screen;

    void _printTouchEventMessage(QString const& object_type_name, QString const& object_description = {});
};
}  // namespace aqsi
