/*
 * Copyright (c) 2018-2022 mcumgr authors
 * Copyright (c) 2022 Laird Connectivity
 * Copyright (c) 2022-2023 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef H_FS_MGMT_
#define H_FS_MGMT_

#ifdef __cplusplus
extern "C" {
#endif

/**
 * Command IDs for file system management group.
 */
#define FS_MGMT_ID_FILE				0
#define FS_MGMT_ID_STAT				1
#define FS_MGMT_ID_HASH_CHECKSUM		2
#define FS_MGMT_ID_SUPPORTED_HASH_CHECKSUM	3
#define FS_MGMT_ID_OPENED_FILE			4

/**
 * Command result codes for file system management group.
 */
enum fs_mgmt_err_code_t {
	/** No error, this is implied if there is no ret value in the response */
	FS_MGMT_ERR_OK = 0,

	/** Unknown error occurred. */
	FS_MGMT_ERR_UNKNOWN,

	/** The specified file name is not valid. */
	FS_MGMT_ERR_FILE_INVALID_NAME,

	/** The specified file does not exist. */
	FS_MGMT_ERR_FILE_NOT_FOUND,

	/** The specified file is a directory, not a file. */
	FS_MGMT_ERR_FILE_IS_DIRECTORY,

	/** Error occurred whilst attempting to open a file. */
	FS_MGMT_ERR_FILE_OPEN_FAILED,

	/** Error occurred whilst attempting to seek to an offset in a file. */
	FS_MGMT_ERR_FILE_SEEK_FAILED,

	/** Error occurred whilst attempting to read data from a file. */
	FS_MGMT_ERR_FILE_READ_FAILED,

	/** Error occurred whilst trying to truncate file. */
	FS_MGMT_ERR_FILE_TRUNCATE_FAILED,

	/** Error occurred whilst trying to delete file. */
	FS_MGMT_ERR_FILE_DELETE_FAILED,

	/** Error occurred whilst attempting to write data to a file. */
	FS_MGMT_ERR_FILE_WRITE_FAILED,

	/**
	 * The specified data offset is not valid, this could indicate that the file on the device
	 * has changed since the previous command. The length of the current file on the device is
	 * returned as "len", the user application needs to decide how to handle this (e.g. the
	 * hash of the file could be requested and compared with the hash of the length of the
	 * file being uploaded to see if they match or not).
	 */
	FS_MGMT_ERR_FILE_OFFSET_NOT_VALID,

	/** The requested offset is larger than the size of the file on the device. */
	FS_MGMT_ERR_FILE_OFFSET_LARGER_THAN_FILE,

	/** The requested checksum or hash type was not found or is not supported by this build. */
	FS_MGMT_ERR_CHECKSUM_HASH_NOT_FOUND,

	/** The specified mount point was not found or is not mounted. */
	FS_MGMT_ERR_MOUNT_POINT_NOT_FOUND,

	/** The specified mount point is that of a read-only filesystem. */
	FS_MGMT_ERR_READ_ONLY_FILESYSTEM,

	/** The operation cannot be performed because the file is empty with no contents. */
	FS_MGMT_ERR_FILE_EMPTY,
};

#ifdef __cplusplus
}
#endif

#endif
