// Copyright 2013 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 CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_REMOTE_SYNC_OPERATION_RESOLVER_H_
#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_REMOTE_SYNC_OPERATION_RESOLVER_H_

#include "base/gtest_prod_util.h"
#include "chrome/browser/sync_file_system/file_change.h"
#include "chrome/browser/sync_file_system/sync_file_type.h"
#include "chrome/browser/sync_file_system/sync_operation_type.h"

namespace sync_file_system {

class RemoteSyncOperationResolver {
 public:
  static SyncOperationType Resolve(
      const FileChange& remote_file_change,
      const FileChangeList& local_changes,
      SyncFileType local_file_type,
      bool is_conflicting);

 private:
  static SyncOperationType ResolveForAddOrUpdateFile(
      const FileChangeList& local_changes,
      SyncFileType local_file_type);
  static SyncOperationType ResolveForAddOrUpdateFileInConflict(
      const FileChangeList& local_changes,
      SyncFileType local_file_type);
  static SyncOperationType ResolveForAddDirectory(
      const FileChangeList& local_changes,
      SyncFileType local_file_type);
  static SyncOperationType ResolveForAddDirectoryInConflict(
      const FileChangeList& local_changes,
      SyncFileType local_file_type);
  static SyncOperationType ResolveForDeleteFile(
      const FileChangeList& local_changes,
      SyncFileType local_file_type);
  static SyncOperationType ResolveForDeleteFileInConflict(
      const FileChangeList& local_changes,
      SyncFileType local_file_type);
  static SyncOperationType ResolveForDeleteDirectory(
      const FileChangeList& local_changes,
      SyncFileType local_file_type);
  static SyncOperationType ResolveForDeleteDirectoryInConflict(
      const FileChangeList& local_changes,
      SyncFileType local_file_type);

  FRIEND_TEST_ALL_PREFIXES(RemoteSyncOperationResolverTest,
                           ResolveForAddOrUpdateFile);
  FRIEND_TEST_ALL_PREFIXES(RemoteSyncOperationResolverTest,
                           ResolveForAddOrUpdateFileInConflict);
  FRIEND_TEST_ALL_PREFIXES(RemoteSyncOperationResolverTest,
                           ResolveForAddDirectory);
  FRIEND_TEST_ALL_PREFIXES(RemoteSyncOperationResolverTest,
                           ResolveForAddDirectoryInConflict);
  FRIEND_TEST_ALL_PREFIXES(RemoteSyncOperationResolverTest,
                           ResolveForDeleteFile);
  FRIEND_TEST_ALL_PREFIXES(RemoteSyncOperationResolverTest,
                           ResolveForDeleteFileInConflict);
  FRIEND_TEST_ALL_PREFIXES(RemoteSyncOperationResolverTest,
                           ResolveForDeleteDirectory);
  FRIEND_TEST_ALL_PREFIXES(RemoteSyncOperationResolverTest,
                           ResolveForDeleteDirectoryInConflict);
};

}  // namespace sync_file_system

#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_REMOTE_SYNC_OPERATION_RESOLVER_H_
