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

#include "components/sync/engine/events/configure_get_updates_request_event.h"

#include "base/strings/stringprintf.h"
#include "base/values.h"
#include "components/sync/protocol/proto_enum_conversions.h"
#include "components/sync/protocol/proto_value_conversions.h"

namespace syncer {

ConfigureGetUpdatesRequestEvent::ConfigureGetUpdatesRequestEvent(
    base::Time timestamp,
    sync_pb::SyncEnums::GetUpdatesOrigin origin,
    const sync_pb::ClientToServerMessage& request)
    : timestamp_(timestamp), origin_(origin), request_(request) {}

ConfigureGetUpdatesRequestEvent::~ConfigureGetUpdatesRequestEvent() = default;

std::unique_ptr<ProtocolEvent> ConfigureGetUpdatesRequestEvent::Clone() const {
  return std::make_unique<ConfigureGetUpdatesRequestEvent>(timestamp_, origin_,
                                                           request_);
}

base::Time ConfigureGetUpdatesRequestEvent::GetTimestamp() const {
  return timestamp_;
}

std::string ConfigureGetUpdatesRequestEvent::GetType() const {
  return "Initial GetUpdates";
}

std::string ConfigureGetUpdatesRequestEvent::GetDetails() const {
  return base::StringPrintf("Reason: %s", ProtoEnumToString(origin_));
}

base::DictValue ConfigureGetUpdatesRequestEvent::GetProtoMessage(
    bool include_specifics) const {
  return ClientToServerMessageToValue(
             request_, {.include_specifics = include_specifics,
                        .include_full_get_update_triggers = false})
      .TakeDict();
}

}  // namespace syncer
