// Copyright (c) Orbbec Inc. All Rights Reserved.
// Licensed under the MIT License.

/**
 * @file Error.h
 * @brief Functions for handling errors, mainly used for obtaining error messages.
 */
#pragma once

#ifdef __cplusplus
extern "C" {
#endif

#include "ObTypes.h"

/**
 * @brief Create a new error object.
 *
 * @param status The error status.
 * @param message The error message.
 * @param function The name of the API function that caused the error.
 * @param args The error parameters.
 * @param exception_type The type of exception that caused the error.
 * @return ob_error* The new error object.
 */
OB_EXPORT ob_error *ob_create_error(ob_status status, const char *message, const char *function, const char *args, ob_exception_type exception_type);

/**
 * @brief Get the error status.
 *
 * @param[in] error The error object.
 * @return The error status.
 */
OB_EXPORT ob_status ob_error_get_status(const ob_error *error);

/**
 * @brief Get the error message.
 *
 * @param[in] error The error object.
 * @return The error message.
 */
OB_EXPORT const char *ob_error_get_message(const ob_error *error);

/**
 * @brief Get the name of the API function that caused the error.
 *
 * @param[in] error The error object.
 * @return The name of the API function.
 */
OB_EXPORT const char *ob_error_get_function(const ob_error *error);

/**
 * @brief Get the error parameters.
 *
 * @param[in] error The error object.
 * @return The error parameters.
 */
OB_EXPORT const char *ob_error_get_args(const ob_error *error);

/**
 * @brief Get the type of exception that caused the error.
 *
 * @param[in] error The error object.
 * @return The type of exception.
 */
OB_EXPORT ob_exception_type ob_error_get_exception_type(const ob_error *error);

/**
 * @brief Delete the error object.
 *
 * @param[in] error The error object to delete, you should set the pointer to NULL after calling this function.
 */
OB_EXPORT void ob_delete_error(ob_error *error);

// The following interfaces are deprecated and are retained here for compatibility purposes.
#define ob_error_status ob_error_get_status
#define ob_error_message ob_error_get_message
#define ob_error_function ob_error_get_function
#define ob_error_args ob_error_get_args
#define ob_error_exception_type ob_error_get_exception_type

#ifdef __cplusplus
}
#endif
