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

#ifndef COMPONENTS_SYNC_ENGINE_UPDATE_HANDLER_H_
#define COMPONENTS_SYNC_ENGINE_UPDATE_HANDLER_H_

#include <memory>
#include <vector>

#include "components/sync/base/sync_invalidation.h"
#include "components/sync/engine/syncer_error.h"

namespace sync_pb {
class DataTypeContext;
class DataTypeProgressMarker;
class SyncEntity;
class GetUpdateTriggers;
}  // namespace sync_pb

using SyncEntityList = std::vector<const sync_pb::SyncEntity*>;

namespace syncer {

class StatusController;

// This class represents an entity that can request, receive, and apply updates
// from the sync server.
class UpdateHandler {
 public:
  // Result of a GetUpdates request for a data type that was nudged (contained
  // at least one invalidation hint for the data type). These values are
  // persisted to logs. Entries should not be renumbered and numeric values
  // should never be reused. LINT.IfChange(NudgedUpdateResult)
  enum class NudgedUpdateResult {
    // The data type successfully downloaded at least one entity.
    kSuccess = 0,

    // No entities were downloaded when data type was invalidated.
    kEmptyResponse = 1,

    // The data type failed to download updates during a sync cycle while a
    // GetUpdates request succeeded.
    kDownloadPartialFailure = 2,

    // The whole GetUpdates request failed due to a server error.
    kDownloadRequestServerError = 3,

    // The whole GetUpdates request failed due to a network error.
    kDownloadRequestNetworkError = 4,

    kMaxValue = kDownloadRequestNetworkError,
  };
  // LINT.ThenChange(/tools/metrics/histograms/metadata/sync/enums.xml:NudgedUpdateResult)

  virtual ~UpdateHandler() = default;

  // Returns true if initial sync was performed for this type.
  virtual bool IsInitialSyncEnded() const = 0;

  // Returns the stored progress marker for this type.
  virtual const sync_pb::DataTypeProgressMarker& GetDownloadProgress()
      const = 0;

  // Returns the per-client datatype context.
  virtual const sync_pb::DataTypeContext& GetDataTypeContext() const = 0;

  // Records an incoming invalidation for this type.
  virtual void RecordRemoteInvalidation(
      std::unique_ptr<SyncInvalidation> incoming) = 0;

  // Records a failure during a GetUpdates request.
  virtual void RecordDownloadFailure(
      NudgedUpdateResult failure_result) const = 0;

  // Fill invalidation related fields in GetUpdates request.
  virtual void CollectPendingInvalidations(sync_pb::GetUpdateTriggers* msg) = 0;
  // Returns true if `pending_invalidations_` vector is not empty.
  virtual bool HasPendingInvalidations() const = 0;

  // Processes the contents of a GetUpdates response message.
  //
  // Should be invoked with the progress marker and set of SyncEntities from a
  // single GetUpdates response message.  The progress marker's type must match
  // this update handler's type, and the set of SyncEntities must include all
  // entities of this type found in the response message.
  //
  // In this context, "applicable_updates" means the set of updates belonging to
  // this type.
  virtual void ProcessGetUpdatesResponse(
      const sync_pb::DataTypeProgressMarker& progress_marker,
      const sync_pb::DataTypeContext& mutated_context,
      const SyncEntityList& applicable_updates,
      StatusController* status) = 0;

  // Called whenever any unapplied updates should be applied. This is usually
  // at the end of a sync cycle, but for data types in
  // ApplyUpdatesImmediatelyTypes() it already happens while the download loop
  // is still ongoing.
  virtual void ApplyUpdates(StatusController* status, bool cycle_done) = 0;
};

}  // namespace syncer

#endif  // COMPONENTS_SYNC_ENGINE_UPDATE_HANDLER_H_
