// Copyright 2016 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 "peridot/bin/suggestion_engine/suggestion_engine_helper.h"

#include <lib/fxl/random/uuid.h>

namespace modular {

SuggestionPrototype* CreateSuggestionPrototype(
    SuggestionPrototypeMap* owner, const std::string& source_url,
    fuchsia::modular::Proposal proposal) {
  return CreateSuggestionPrototype(owner, source_url, "", std::move(proposal));
}

SuggestionPrototype* CreateSuggestionPrototype(
    SuggestionPrototypeMap* owner, const std::string& source_url,
    const std::string& preloaded_story_id,
    fuchsia::modular::Proposal proposal) {
  auto prototype_pair = owner->emplace(std::make_pair(source_url, proposal.id),
                                       std::make_unique<SuggestionPrototype>());

  SuggestionPrototype* suggestion_prototype =
      prototype_pair.first->second.get();
  suggestion_prototype->preloaded_story_id = preloaded_story_id;
  suggestion_prototype->suggestion_id = fxl::GenerateUUID();
  suggestion_prototype->source_url = source_url;
  suggestion_prototype->timestamp = zx::clock::get_monotonic();
  suggestion_prototype->proposal = std::move(proposal);

  return suggestion_prototype;
}

}  // namespace modular
