#pragma once

#include "utils/cvec/cvec.hpp"
#include "utils/real_time/real_time.hpp"
#include "setup.hpp"
#include "result.hpp"

namespace hr
{
  class plugin
  {
    public:
      plugin(const setup& st) : m_setup { st } { }

    public:
      virtual ~plugin() { }

    public:
      // in - результат БПФ
      // base - базовый сигнал
      virtual void process(fvec_t& base, real_time timestamp){};
      virtual void process(cvec_t& fft, fvec_t& base, real_time timestamp){};
      virtual result get_result() = 0;

    public:
      setup m_setup;
  };
}
