#pragma once

#include <memory>

#include <QString>

#include "message_bus/pipeline/PipelineContext.h"

namespace softbus::core::plugin_system
{

class IProtocolSession
{
public:
    virtual ~IProtocolSession() = default;
    virtual bool feed(softbus::message_bus::pipeline::PipelineContext& ctx) = 0;
    virtual void reset() = 0;
};

class IProtocolPlugin
{
public:
    virtual ~IProtocolPlugin() = default;

    virtual QString pluginId() const = 0;
    virtual bool supports(const QString& protocolHint) const = 0;
    virtual std::unique_ptr<IProtocolSession> createSession() = 0;
};

} // namespace softbus::core::plugin_system
