// Copyright 2019 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.

#include "timestamp_extrapolator.h"

#include <zircon/assert.h>

TimestampExtrapolator::TimestampExtrapolator(uint64_t timebase, uint64_t bytes_per_second)
    : timebase_(timebase), bytes_per_second_(bytes_per_second) {}

TimestampExtrapolator::TimestampExtrapolator() {}

void TimestampExtrapolator::Inform(size_t offset, uint64_t timestamp) {
  last_information_ = {.offset = offset, .timestamp = timestamp};
}

std::optional<uint64_t> TimestampExtrapolator::Extrapolate(size_t offset) {
  if (!last_information_) {
    return std::nullopt;
  }

  auto last_information = *last_information_;
  last_information_ = std::nullopt;

  ZX_DEBUG_ASSERT_MSG(last_information.offset <= offset,
                      "offset %lu behind last informed timestamp's offset %lu", offset,
                      last_information.offset);

  if (!timebase_) {
    if (offset == last_information.offset) {
      return last_information.timestamp;
    } else {
      return std::nullopt;
    }
  }

  uint64_t delta = offset - last_information.offset;
  return {last_information.timestamp + delta * (*timebase_) / bytes_per_second_};
}
