#ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_COLLECTOR_COLLECTOR_H_
#define THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_COLLECTOR_COLLECTOR_H_

#include <climits>
#include <cstdint>
#include <string>

#include "absl/status/status.h"
#include "nlohmann/json.hpp"

namespace milotic_tlbmc {

// Interface for collecting telemetry data.
// Each concrete collector shall be responsible for collecting telemetry data
// for a specific resource type.
// Example: FruCollector collects FRU data, SensorCollector collects sensor
// data etc.
// Collected data shall be written to the data store or stored locally
class Collector {
 public:
  enum class Type : uint8_t {
    kFru = 0,
    kSensor,
  };

  // Config parameters for the collector.
  struct Config {
    // The sampling interval of the collector.
    int sampling_interval_ms = INT_MIN;
    int max_batch_size = INT_MIN;
    // The key of the resource to be collected.
    std::string key;
  };

  virtual ~Collector() = default;
  virtual nlohmann::json ToJson() const = 0;
  // Returns the scheduler stats for the collector.
  virtual nlohmann::json GetSchedulerStats() const = 0;

  // Configures the collector.
  //
  // Config::key is used to identify the resource to configure. If not provided,
  // all resources are configured.
  //
  // Config::sampling_interval_ms is used to configure the sampling interval of
  // the resource. If set to INT_MIN, no change is made to the sampling
  // interval. If set to 0, the sampling interval is reset to the default value.
  //
  // Config::max_batch_size is used to configure the max batch size of the
  // resource. If set to INT_MIN, no change is made to the batch size. If set to
  // 0, the batch size is reset to the default value.
  virtual absl::Status ConfigureCollection(
      [[maybe_unused]] const Config& config) const {
    return absl::UnimplementedError(
        "ConfigureCollection is not implemented for "
        "this collector.");
  }
};

}  // namespace milotic_tlbmc

#endif  // THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_COLLECTOR_COLLECTOR_H_
