// prometheus-cpp headers
#include <prometheus/counter.h>
#include <prometheus/exposer.h>
#include <prometheus/gauge.h>
#include <prometheus/histogram.h>
#include <prometheus/registry.h>

#include <iostream>
#include <thread>

class MetricsManager {
   private:
    const std::string address_prometheus;

   public:
    std::atomic<bool> running{true};
    prometheus::Gauge *my_gauge = nullptr;
    std::shared_ptr<prometheus::Registry> registry;
    prometheus::Family<prometheus::Gauge> *gauge_family = nullptr;
    std::unique_ptr<prometheus::Exposer> exposer = nullptr;
    prometheus::Counter *counter = nullptr;
    prometheus::Family<prometheus::Counter> *counter_family = nullptr;

    void metrics_loop();
    void setup_prometheus();
    MetricsManager();
    MetricsManager(const std::string &address);
    ~MetricsManager();  // keep only if you define it
};