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

#ifndef COMPONENTS_SYNC_ENGINE_COMMIT_PROCESSOR_H_
#define COMPONENTS_SYNC_ENGINE_COMMIT_PROCESSOR_H_

#include <stddef.h>

#include "base/memory/raw_ptr.h"
#include "components/sync/base/model_type.h"
#include "components/sync/engine/commit.h"
#include "components/sync/engine/model_type_registry.h"

namespace syncer {

class CommitContributor;

// This class manages the set of per-type committer objects.
//
// It owns these types and hides the details of iterating over all of them.
// It is a logic error if the supplied set of types contains a type which was
// not previously registered.
class CommitProcessor {
 public:
  // |commit_types| must contain NIGORI. |commit_contributor_map| must be not
  // null and must outlive this object.
  CommitProcessor(ModelTypeSet commit_types,
                  CommitContributorMap* commit_contributor_map);

  CommitProcessor(const CommitProcessor&) = delete;
  CommitProcessor& operator=(const CommitProcessor&) = delete;

  ~CommitProcessor();

  // Gathers a set of contributions to be used to populate a commit message.
  //
  // For each of the |commit_types| in this CommitProcessor's CommitContributor
  // map, gather any entries queued for commit into CommitContributions.  The
  // total number of entries in all the returned CommitContributions shall not
  // exceed |max_entries|.
  // Returns no contribution if previous call collected them from all datatypes
  // and total number of collected entries was less than |max_entries|.
  Commit::ContributionMap GatherCommitContributions(size_t max_entries);

 private:
  // Gathering is split into phases for 2 reasons: 1) to provide prioritization,
  // and 2) to avoid  infinite commit cycles when some data type generates
  // updates at very high speed.
  enum class GatheringPhase { kPriority, kRegular, kDone };

  // Increments |phase| (in the order given above in GatheringPhase).
  static GatheringPhase IncrementGatheringPhase(GatheringPhase phase);

  // Returns user data types that should be gathered for committing in the
  // current phase.
  ModelTypeSet GetUserTypesForCurrentCommitPhase() const;

  // Gathers commit contributions for an individual datatype and populates
  // |*contributions|. Returns the number of entries added.
  size_t GatherCommitContributionsForType(
      ModelType type,
      size_t max_entries,
      Commit::ContributionMap* contributions);

  // Gathers commit contributions for |types| and populates |*contributions|.
  // Returns the number of entries added.
  size_t GatherCommitContributionsForTypes(
      ModelTypeSet types,
      size_t max_entries,
      Commit::ContributionMap* contributions);

  const ModelTypeSet commit_types_;

  // A map of 'commit contributors', one for each enabled type.
  raw_ptr<CommitContributorMap> commit_contributor_map_;
  GatheringPhase phase_;
};

}  // namespace syncer

#endif  // COMPONENTS_SYNC_ENGINE_COMMIT_PROCESSOR_H_
