#ifndef BLURHELPER_H
#define BLURHELPER_H

#include <QObject>
#include <QRect>
#include <qwindowdefs.h>
#include <KWindowEffects>

class QQmlApplicationEngine;
class BlurHelper : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QRect rect READ rect WRITE setRect NOTIFY rectChanged)
    Q_PROPERTY(int radius READ radius WRITE setRadius NOTIFY radiusChanged)
    Q_PROPERTY(QObject *window READ window WRITE setWindow NOTIFY windowChanged)

public:
    explicit BlurHelper(QObject *parent = nullptr);
    ~BlurHelper();

    Q_INVOKABLE void updateBlur();

    QRect rect() const {
        return m_rect;
    }

    void setRect(const QRect &rect);

    int radius() const {
        return m_radius;
    }
    void setRadius(const int &radius);

    QObject *window() const;
    void setWindow(QObject *window);

    void enableBlur();

    QRegion calculateRegion(QRect rect, int radius);

Q_SIGNALS:
    void rectChanged();
    void radiusChanged();
    void windowChanged();

private:
    QRect m_rect;
    int m_radius;
    QObject *m_window = nullptr;
};

#endif // BLURHELPER_H
