// Copyright 2012 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_DRIVE_FILE_ERRORS_H_
#define COMPONENTS_DRIVE_FILE_ERRORS_H_

#include "base/files/file.h"
#include "components/drive/drive_export.h"
#include "google_apis/common/api_error_codes.h"

namespace drive {

// These values are persisted to UMA histograms (see UMA enum DriveFileError).
// The histogram values are positive (1=OK, 2=FAILED, 3=IN_USE, etc).
// Entries should not be renumbered and numeric values should never be reused.
//
// Consider using `IsFileErrorOk` to check for successful operations, as it
// includes both `FILE_ERROR_OK` and `FILE_ERROR_OK_WITH_MORE_RESULTS`.
enum FileError {
  FILE_ERROR_OK = 0,
  FILE_ERROR_FAILED = -1,
  FILE_ERROR_IN_USE = -2,
  FILE_ERROR_EXISTS = -3,
  FILE_ERROR_NOT_FOUND = -4,
  FILE_ERROR_ACCESS_DENIED = -5,
  FILE_ERROR_TOO_MANY_OPENED = -6,
  FILE_ERROR_NO_MEMORY = -7,
  FILE_ERROR_NO_SERVER_SPACE = -8,
  FILE_ERROR_NOT_A_DIRECTORY = -9,
  FILE_ERROR_INVALID_OPERATION = -10,
  FILE_ERROR_SECURITY = -11,
  FILE_ERROR_ABORT = -12,
  FILE_ERROR_NOT_A_FILE = -13,
  FILE_ERROR_NOT_EMPTY = -14,
  FILE_ERROR_INVALID_URL = -15,
  FILE_ERROR_NO_CONNECTION = -16,
  FILE_ERROR_NO_LOCAL_SPACE = -17,
  FILE_ERROR_SERVICE_UNAVAILABLE = -18,
  FILE_ERROR_OK_WITH_MORE_RESULTS = -19,
  // Put new entries here and adjust FILE_ERROR_MAX.
  FILE_ERROR_MAX = FILE_ERROR_OK_WITH_MORE_RESULTS,
};

COMPONENTS_DRIVE_EXPORT
std::ostream& operator<<(std::ostream& out, FileError error);

// Returns whether a `FileError` represents a successful operation.
COMPONENTS_DRIVE_EXPORT
bool IsFileErrorOk(FileError error);

// Returns a string representation of FileError.
COMPONENTS_DRIVE_EXPORT
std::string FileErrorToString(FileError error);

// Returns a base::File::Error that corresponds to the FileError provided.
COMPONENTS_DRIVE_EXPORT
base::File::Error FileErrorToBaseFileError(FileError error);

// Converts GData error code into Drive file error code.
COMPONENTS_DRIVE_EXPORT
FileError GDataToFileError(google_apis::ApiErrorCode status);

}  // namespace drive

#endif  // COMPONENTS_DRIVE_FILE_ERRORS_H_
