// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COBALT_SRC_LOCAL_AGGREGATION_1_1_BACKFILL_MANAGER_H_
#define COBALT_SRC_LOCAL_AGGREGATION_1_1_BACKFILL_MANAGER_H_

#include "src/local_aggregation_1_1/aggregation_procedures/aggregation_procedure.h"
#include "src/local_aggregation_1_1/local_aggregation.pb.h"
#include "src/registry/metric_definition.pb.h"

namespace cobalt::local_aggregation {

// BackfillManager is responsible for computing the list of aggregation periods for which no
// observations were generated for a particular report.
class BackfillManager {
 public:
  // |total_backfill_window| The maximum number of days to generate daily/hourly observations for
  // (including the day_index in |end_time_info|).
  explicit BackfillManager(uint32_t total_backfill_window);

  // CalculateBackfill returns a list of TimeInfos corresponding to aggregation periods for which
  // observations have not yet been generated.
  //
  // |start_time| The oldest time to consider, if |start_time| is more than |backstop_days_| before
  //              |end_time|, then the backstop will be used instead.
  // |end_time|   The most recent time to consider (inclusive).
  // |time_zone|  The time zone to use for calculating hour_ids.
  // |is_daily|   If true, we should generate daily TimeInfos, otherwise generate hourly.
  [[nodiscard]] std::vector<util::TimeInfo> CalculateBackfill(
      util::TimeInfo start_time, util::TimeInfo end_time,
      MetricDefinition::TimeZonePolicy time_zone, bool is_daily) const;

 private:
  // The number of days in the past for which we should generate observations.
  uint32_t backstop_days_;
};

}  // namespace cobalt::local_aggregation

#endif  // COBALT_SRC_LOCAL_AGGREGATION_1_1_BACKFILL_MANAGER_H_
