#ifndef SHELLNOTIFIER_H
#define SHELLNOTIFIER_H

#include <QObject>

#include <memory>

class AbstractShellNotifier : public QObject
{
    Q_OBJECT
public:
    AbstractShellNotifier();

    virtual void notify(const QString& path) = 0;

signals:
    void shellNotificationProcessed();
};

class ShellNotifierDecorator : public AbstractShellNotifier
{
    Q_OBJECT

public:
    ShellNotifierDecorator(std::shared_ptr<AbstractShellNotifier> baseNotifier);
    virtual ~ShellNotifierDecorator() = default;

protected:
    std::shared_ptr<AbstractShellNotifier> mBaseNotifier;
};

class SignalShellNotifier : public AbstractShellNotifier
{
    Q_OBJECT

public:
    SignalShellNotifier() = default;
    virtual ~SignalShellNotifier() = default;

    void notify(const QString& path) override;
};

#endif // SHELLNOTIFIER_H
