/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef NOTIFICATIONHANDLER_H
#define NOTIFICATIONHANDLER_H

#include <QObject>
#include "core/protocols/vpnProtocol.h"

class QMenu;

class NotificationHandler : public QObject {
    Q_OBJECT
    Q_DISABLE_COPY_MOVE(NotificationHandler)

public:
    enum Message {
        VpnState,
        UnsecuredNetwork
    };

    static NotificationHandler* create(QObject* parent);

    static NotificationHandler* instance();

    virtual ~NotificationHandler();

    void unsecuredNetworkNotification(const QString& networkName);

    void messageClickHandle();

public slots:
    virtual void setConnectionState(Vpn::ConnectionState state);
    virtual void onTranslationsUpdated();

signals:
    void notificationShown(const QString& title, const QString& message);
    void notificationClicked(Message message);

    void raiseRequested();
    void connectRequested();
    void disconnectRequested();

protected:
    explicit NotificationHandler(QObject* parent);

    virtual void notify(Message type, const QString& title,
                        const QString& message, int timerMsec) = 0;

private:
    virtual void notifyInternal(Message type, const QString& title,
                                const QString& message, int timerMsec);

protected:
    Message m_lastMessage = VpnState;

private:

    // We want to show a 'disconnected' notification only if we were actually
    // connected.
    bool m_connected = false;
};

#endif  // NOTIFICATIONHANDLER_H
