// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_FEEDBACK_REDACTION_TOOL_METRICS_TESTER_H_
#define COMPONENTS_FEEDBACK_REDACTION_TOOL_METRICS_TESTER_H_

#include <memory>
#include <string_view>

#include "redaction_tool/redaction_tool_metrics_recorder.h"

namespace redaction {

// A helper class for testing metric collection on Chromium and ChromiumOS.
class MetricsTester {
 public:
  // Create a new instance of the default implementation for this platform.
  static std::unique_ptr<MetricsTester> Create();

  MetricsTester() = default;
  MetricsTester(const MetricsTester&) = delete;
  MetricsTester& operator=(const MetricsTester&) = delete;
  virtual ~MetricsTester() = default;

  // Get the number of times a histogram value was recorded while this instance
  // exists and the values are recorded with the recorder from
  // `SetupRecorder()`.
  virtual size_t GetBucketCount(std::string_view histogram_name,
                                int histogram_value) = 0;

  // Get the number of entries for the `histogram_name`.
  virtual size_t GetNumBucketEntries(std::string_view histogram_name) = 0;

  // Create a `RedactionToolMetricsRecorder` that is configured so it can return
  // metric values in `GetBucketCount()`.
  virtual std::unique_ptr<RedactionToolMetricsRecorder> SetupRecorder() = 0;
};

}  // namespace redaction

#endif  // COMPONENTS_FEEDBACK_REDACTION_TOOL_METRICS_TESTER_H_
