/*
   SPDX-FileCopyrightText: 2018-2026 Laurent Montel <montel@kde.org>

   SPDX-License-Identifier: LGPL-2.0-or-later
*/

#pragma once

#include "messagecomposer_export.h"
#include <KMime/Message>
#include <MessageComposer/PluginActionType>
#include <QObject>

namespace KPIMTextEdit
{
class RichTextComposer;
}
class KActionCollection;
namespace MessageComposer
{
class TextPart;
class PluginEditorConvertTextInterfacePrivate;
class PluginEditorConverterInitialData;
class PluginEditorConverterBeforeConvertingData;
class PluginEditorConvertText;
/*!
 * \class MessageComposer::PluginEditorConvertTextInterface
 * \inmodule MessageComposer
 * \inheaderfile MessageComposer/PluginEditorConvertTextInterface
 * \brief The PluginEditorConvertTextInterface class
 * \author Laurent Montel <montel@kde.org>
 */
class MESSAGECOMPOSER_EXPORT PluginEditorConvertTextInterface : public QObject
{
    Q_OBJECT
public:
    /*!
     */
    explicit PluginEditorConvertTextInterface(QObject *parent = nullptr);
    /*!
     */
    ~PluginEditorConvertTextInterface() override;

    enum class ConvertTextStatus : uint8_t {
        NotConverted,
        Converted,
        Error,
    };

    /*!
     */
    virtual bool reformatText();

    /*!
     */
    [[nodiscard]] virtual PluginEditorConvertTextInterface::ConvertTextStatus convertTextToFormat(MessageComposer::TextPart *textPart) = 0;

    /*!
     */
    void setParentWidget(QWidget *parent);
    /*!
     */
    [[nodiscard]] QWidget *parentWidget() const;

    /*!
     */
    [[nodiscard]] KPIMTextEdit::RichTextComposer *richTextEditor() const;
    /*!
     */
    void setRichTextEditor(KPIMTextEdit::RichTextComposer *richTextEditor);

    /*!
     */
    void setActionType(const QList<PluginActionType> &type);
    /*!
     */
    void addActionType(PluginActionType type);
    /*!
     */
    [[nodiscard]] QList<PluginActionType> actionTypes() const;

    /*!
     */
    virtual void createAction(KActionCollection *ac);

    /*!
     */
    virtual void setInitialData(const PluginEditorConverterInitialData &data);
    /*!
     */
    [[nodiscard]] PluginEditorConverterInitialData initialData() const;

    /*!
     */
    virtual void setBeforeConvertingData(const PluginEditorConverterBeforeConvertingData &data);
    /*!
     */
    [[nodiscard]] PluginEditorConverterBeforeConvertingData beforeConvertingData() const;

    /*!
     */
    virtual void enableDisablePluginActions(bool richText);

    /*!
     */
    void setStatusBarWidget(QWidget *w);

    /*!
     */
    [[nodiscard]] QWidget *statusBarWidget() const;

    /*!
     */
    void setPlugin(PluginEditorConvertText *plugin);
    /*!
     */
    [[nodiscard]] PluginEditorConvertText *plugin() const;

public Q_SLOTS:
    /*!
     */
    virtual void reloadConfig();

Q_SIGNALS:
    /*!
     */
    void textReformated();

private:
    std::unique_ptr<PluginEditorConvertTextInterfacePrivate> const d;
};
}
