/**
 * SPDX-FileCopyrightText: 2013 Albert Vaca <albertvaka@gmail.com>
 *
 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
 */

#ifndef PLUGINLOADER_H
#define PLUGINLOADER_H

#include <QHash>
#include <QObject>
#include <QString>

#include <KPluginMetaData>

#include "kdeconnectcore_export.h"

class Device;
class KdeConnectPlugin;
class KPluginFactory;

class KDECONNECTCORE_EXPORT PluginLoader
{
public:
    static PluginLoader *instance();

    QStringList getPluginList() const;
    bool doesPluginExist(const QString &name) const;
    KPluginMetaData getPluginInfo(const QString &name) const;
    KdeConnectPlugin *instantiatePluginForDevice(const QString &name, Device *device) const;

    QStringList incomingCapabilities() const;
    QStringList outgoingCapabilities() const;
    QSet<QString> pluginsForCapabilities(const QSet<QString> &incoming, const QSet<QString> &outgoing) const;

private:
    PluginLoader();

    QHash<QString, KPluginMetaData> plugins;
};

#endif