#pragma once

#include <span>
#include <string>

#include "processing_live_config.hpp"
#include "run_config.hpp"
#include "shared_types.hpp"

namespace radar::processing {

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

    [[nodiscard]] virtual auto name() const -> std::string = 0;
    [[nodiscard]] virtual auto process_collection(
        const config::RunConfig& run_config,
        const ipc::PreprocessedCollection& collection,
        std::span<const ipc::PreprocessedCollection> previous_collections,
        const ProcessingLiveConfig& live_config
    ) -> ipc::ResultCollection = 0;
};

}  // namespace radar::processing
