/*
    SPDX-FileCopyrightText: 2016 Jan Grulich <jgrulich@redhat.com>

    SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/

#ifndef PLASMA_NM_KCM_H
#define PLASMA_NM_KCM_H

#include "connectioneditortabwidget.h"
#include "handler.h"

#include <KCModule>
#include <ui_kcm.h>

class KMessageWidget;

class KCMNetworkmanagement : public KCModule
{
    Q_OBJECT
public:
    explicit KCMNetworkmanagement(QObject *parent, const KPluginMetaData &metaData, const QVariantList &args);
    ~KCMNetworkmanagement() override;

    Q_INVOKABLE void onRequestCreateConnection(int connectionType, const QString &vpnType, const QString &specificType, bool shared);
    Q_INVOKABLE void onSelectedConnectionChanged(const QString &connectionPath);
    Q_INVOKABLE void onRequestExportConnection(const QString &connectionPath);
    Q_INVOKABLE void onRequestToChangeConnection(const QString &connectionName, const QString &connectionPath);

public Q_SLOTS:
    void defaults() override;
    void load() override;
    void save() override;

private Q_SLOTS:
    void onConnectionAdded(const QString &connection);

private:
    struct ImportResult {
        bool success;
        QString errorMessage;

        static ImportResult pass();
        static ImportResult fail(const QString &message);
    };

    void addConnection(const NetworkManager::ConnectionSettings::Ptr &connectionSettings);
    [[nodiscard]] KCMNetworkmanagement::ImportResult importVpn();
    [[nodiscard]] KCMNetworkmanagement::ImportResult importVpnFile(const QString &fileName);
    void kcmChanged(bool kcmChanged);
    void loadConnectionSettings(const NetworkManager::ConnectionSettings::Ptr &connectionSettings);
    void resetSelection();
    QString vpnFileFromArgs(const QVariantList &args) const;
    void promptImportVpn(const QString &vpnFile);
    NetworkManager::Connection::Ptr connectionFromArgs(const QVariantList &args) const;

    QString m_currentConnectionPath;
    QString m_createdConnectionUuid;
    Handler *const m_handler;
    ConnectionEditorTabWidget *m_tabWidget = nullptr;
    QTimer *m_timer = nullptr;
    KMessageWidget *m_importFeedbackWidget;
    QHBoxLayout *m_layout = nullptr;
    Ui::KCMForm *const m_ui;
};

#endif
