#pragma once

#include <memory>

#include "Observation.hpp"

class Renderable_Base;

class Frame_Strategy_Real_Time_Data_Observer {
public:
    static constexpr bool enabled = true;

    Frame_Strategy_Real_Time_Data_Observer();
    explicit Frame_Strategy_Real_Time_Data_Observer(
        Renderable_Base& renderable);

    std::shared_ptr<void> bind(Renderable_Base& renderable);
    void observe(const Real_Time_Data_Observation& observation) noexcept;

private:
    struct State;
    std::shared_ptr<State> state_;
    std::shared_ptr<void> direct_binding_;
};
