// Copyright 2018 The Chromium OS 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 "diagnostics/telem/telem_cache.h"

#include <utility>

namespace diagnostics {

TelemCache::TelemCache() {
  default_tick_clock_ = std::make_unique<base::DefaultTickClock>();
  tick_clock_ = default_tick_clock_.get();
}

TelemCache::TelemCache(base::TickClock* tick_clock) : tick_clock_(tick_clock) {}

TelemCache::~TelemCache() = default;

bool TelemCache::IsValid(TelemetryItemEnum item,
                         base::TimeDelta acceptable_age) const {
  return cache_.count(item) &&
         (tick_clock_->NowTicks() - cache_.at(item).last_fetched_time_ticks) <
             acceptable_age;
}

const base::Optional<base::Value> TelemCache::GetParsedData(
    TelemetryItemEnum item) {
  if (!cache_.count(item))
    return base::nullopt;

  return cache_.at(item).data;
}

void TelemCache::SetParsedData(TelemetryItemEnum item,
                               base::Optional<base::Value> data) {
  TelemItem new_telem_item(data, tick_clock_->NowTicks());

  if (!cache_.count(item))
    cache_.emplace(item, new_telem_item);
  else
    cache_.at(item) = new_telem_item;
}

void TelemCache::Invalidate() {
  cache_.clear();
}

TelemCache::TelemItem::TelemItem(base::Optional<base::Value> data_in,
                                 base::TimeTicks last_fetched_time_ticks_in)
    : data(data_in), last_fetched_time_ticks(last_fetched_time_ticks_in) {}

}  // namespace diagnostics
