/*
 *
 *    Copyright (c) 2020-2022 Project CHIP Authors
 *    Copyright (c) 2019 Google LLC.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */
#include <lib/core/CHIPError.h>

#include <lib/core/CHIPConfig.h>
#include <lib/core/ErrorStr.h>

namespace chip {

/**
 * Register a text error formatter for CHIP core errors.
 */
void RegisterCHIPLayerErrorFormatter()
{
    static ErrorFormatter sCHIPErrorFormatter = { FormatCHIPError, nullptr };

    RegisterErrorFormatter(&sCHIPErrorFormatter);
}

/**
 * Given a CHIP error, returns a human-readable NULL-terminated C string
 * describing the error.
 *
 * @param[in] buf                   Buffer into which the error string will be placed.
 * @param[in] bufSize               Size of the supplied buffer in bytes.
 * @param[in] err                   The error to be described.
 *
 * @return true                     If a description string was written into the supplied buffer.
 * @return false                    If the supplied error was not a CHIP error.
 *
 */
bool FormatCHIPError(char * buf, uint16_t bufSize, CHIP_ERROR err)
{
    const char * desc = nullptr;

    if (!err.IsPart(ChipError::SdkPart::kCore))
    {
        return false;
    }

#if !CHIP_CONFIG_SHORT_ERROR_STR
    switch (err.AsInteger())
    {
    case CHIP_ERROR_SENDING_BLOCKED.AsInteger():
        desc = "Sending blocked";
        break;
    case CHIP_ERROR_CONNECTION_ABORTED.AsInteger():
        desc = "Connection aborted";
        break;
    case CHIP_ERROR_INCORRECT_STATE.AsInteger():
        desc = "Incorrect state";
        break;
    case CHIP_ERROR_MESSAGE_TOO_LONG.AsInteger():
        desc = "Message too long";
        break;
    case CHIP_ERROR_RECURSION_DEPTH_LIMIT.AsInteger():
        desc = "Recursion depth limit reached";
        break;
    case CHIP_ERROR_TOO_MANY_UNSOLICITED_MESSAGE_HANDLERS.AsInteger():
        desc = "Too many unsolicited message handlers";
        break;
    case CHIP_ERROR_NO_UNSOLICITED_MESSAGE_HANDLER.AsInteger():
        desc = "No unsolicited message handler";
        break;
    case CHIP_ERROR_NO_CONNECTION_HANDLER.AsInteger():
        desc = "No connection handler";
        break;
    case CHIP_ERROR_TOO_MANY_PEER_NODES.AsInteger():
        desc = "Too many peer nodes";
        break;
    case CHIP_ERROR_SENTINEL.AsInteger():
        desc = "Internal sentinel";
        break;
    case CHIP_ERROR_NO_MEMORY.AsInteger():
        desc = "No memory";
        break;
    case CHIP_ERROR_NO_MESSAGE_HANDLER.AsInteger():
        desc = "No message handler";
        break;
    case CHIP_ERROR_MESSAGE_INCOMPLETE.AsInteger():
        desc = "Message incomplete";
        break;
    case CHIP_ERROR_DATA_NOT_ALIGNED.AsInteger():
        desc = "Data not aligned";
        break;
    case CHIP_ERROR_UNKNOWN_KEY_TYPE.AsInteger():
        desc = "Unknown key type";
        break;
    case CHIP_ERROR_KEY_NOT_FOUND.AsInteger():
        desc = "Key not found";
        break;
    case CHIP_ERROR_WRONG_ENCRYPTION_TYPE.AsInteger():
        desc = "Wrong encryption type";
        break;
    case CHIP_ERROR_INVALID_UTF8.AsInteger():
        desc = "Character string is not a valid utf-8 encoding";
        break;
    case CHIP_ERROR_INTEGRITY_CHECK_FAILED.AsInteger():
        desc = "Integrity check failed";
        break;
    case CHIP_ERROR_INVALID_SIGNATURE.AsInteger():
        desc = "Invalid signature";
        break;
    case CHIP_ERROR_INVALID_TLV_CHAR_STRING.AsInteger():
        desc = "Invalid TLV Char string encoding.";
        break;
    case CHIP_ERROR_UNSUPPORTED_SIGNATURE_TYPE.AsInteger():
        desc = "Unsupported signature type";
        break;
    case CHIP_ERROR_INVALID_MESSAGE_LENGTH.AsInteger():
        desc = "Invalid message length";
        break;
    case CHIP_ERROR_BUFFER_TOO_SMALL.AsInteger():
        desc = "Buffer too small";
        break;
    case CHIP_ERROR_DUPLICATE_KEY_ID.AsInteger():
        desc = "Duplicate key id";
        break;
    case CHIP_ERROR_WRONG_KEY_TYPE.AsInteger():
        desc = "Wrong key type";
        break;
    case CHIP_ERROR_UNINITIALIZED.AsInteger():
        desc = "Uninitialized";
        break;
    case CHIP_ERROR_INVALID_IPK.AsInteger():
        desc = "Invalid IPK";
        break;
    case CHIP_ERROR_INVALID_STRING_LENGTH.AsInteger():
        desc = "Invalid string length";
        break;
    case CHIP_ERROR_INVALID_LIST_LENGTH.AsInteger():
        desc = "Invalid list length";
        break;
    case CHIP_ERROR_FAILED_DEVICE_ATTESTATION.AsInteger():
        desc = "Failed Device Attestation";
        break;
    case CHIP_END_OF_TLV.AsInteger():
        desc = "End of TLV";
        break;
    case CHIP_ERROR_TLV_UNDERRUN.AsInteger():
        desc = "TLV underrun";
        break;
    case CHIP_ERROR_INVALID_TLV_ELEMENT.AsInteger():
        desc = "Invalid TLV element";
        break;
    case CHIP_ERROR_INVALID_TLV_TAG.AsInteger():
        desc = "Invalid TLV tag";
        break;
    case CHIP_ERROR_UNKNOWN_IMPLICIT_TLV_TAG.AsInteger():
        desc = "Unknown implicit TLV tag";
        break;
    case CHIP_ERROR_WRONG_TLV_TYPE.AsInteger():
        desc = "Wrong TLV type";
        break;
    case CHIP_ERROR_TLV_CONTAINER_OPEN.AsInteger():
        desc = "TLV container open";
        break;
    case CHIP_ERROR_INVALID_MESSAGE_TYPE.AsInteger():
        desc = "Invalid message type";
        break;
    case CHIP_ERROR_UNEXPECTED_TLV_ELEMENT.AsInteger():
        desc = "Unexpected TLV element";
        break;
    case CHIP_ERROR_NOT_IMPLEMENTED.AsInteger():
        desc = "Not Implemented";
        break;
    case CHIP_ERROR_INVALID_ADDRESS.AsInteger():
        desc = "Invalid address";
        break;
    case CHIP_ERROR_INVALID_ARGUMENT.AsInteger():
        desc = "Invalid argument";
        break;
    case CHIP_ERROR_TLV_TAG_NOT_FOUND.AsInteger():
        desc = "TLV tag not found";
        break;
    case CHIP_ERROR_MISSING_SECURE_SESSION.AsInteger():
        desc = "Missing secure session";
        break;
    case CHIP_ERROR_INVALID_ADMIN_SUBJECT.AsInteger():
        desc = "CaseAdminSubject is not valid";
        break;
    case CHIP_ERROR_INSUFFICIENT_PRIVILEGE.AsInteger():
        desc = "Required privilege was insufficient during an operation";
        break;
    case CHIP_ERROR_IM_MALFORMED_COMMAND_DATA_IB.AsInteger():
        desc = "Malformed Interacton Model Command Data IB";
        break;
    case CHIP_ERROR_INVALID_PATH_LIST.AsInteger():
        desc = "Invalid TLV path list";
        break;
    case CHIP_ERROR_INVALID_DATA_LIST.AsInteger():
        desc = "Invalid TLV data list";
        break;
    case CHIP_ERROR_TRANSACTION_CANCELED.AsInteger():
        desc = "Transaction canceled";
        break;
    case CHIP_ERROR_INVALID_SUBSCRIPTION.AsInteger():
        desc = "Invalid Subscription Id";
        break;
    case CHIP_ERROR_TIMEOUT.AsInteger():
        desc = "Timeout";
        break;
    case CHIP_ERROR_INVALID_DEVICE_DESCRIPTOR.AsInteger():
        desc = "Invalid device descriptor";
        break;
    case CHIP_ERROR_INVALID_PASE_PARAMETER.AsInteger():
        desc = "Invalid PASE parameter";
        break;
    case CHIP_ERROR_INVALID_USE_OF_SESSION_KEY.AsInteger():
        desc = "Invalid use of session key";
        break;
    case CHIP_ERROR_CONNECTION_CLOSED_UNEXPECTEDLY.AsInteger():
        desc = "Connection closed unexpectedly";
        break;
    case CHIP_ERROR_MISSING_TLV_ELEMENT.AsInteger():
        desc = "Missing TLV element";
        break;
    case CHIP_ERROR_RANDOM_DATA_UNAVAILABLE.AsInteger():
        desc = "Random data unavailable";
        break;
    case CHIP_ERROR_HOST_PORT_LIST_EMPTY.AsInteger():
        desc = "Host/port empty";
        break;
    case CHIP_ERROR_FORCED_RESET.AsInteger():
        desc = "Service manager forced reset";
        break;
    case CHIP_ERROR_NO_ENDPOINT.AsInteger():
        desc = "No endpoint was available to send the message";
        break;
    case CHIP_ERROR_INVALID_DESTINATION_NODE_ID.AsInteger():
        desc = "Invalid destination node id";
        break;
    case CHIP_ERROR_NOT_CONNECTED.AsInteger():
        desc = "Not connected";
        break;
    case CHIP_ERROR_CA_CERT_NOT_FOUND.AsInteger():
        desc = "CA certificate not found";
        break;
    case CHIP_ERROR_CERT_PATH_LEN_CONSTRAINT_EXCEEDED.AsInteger():
        desc = "Certificate path length constraint exceeded";
        break;
    case CHIP_ERROR_CERT_PATH_TOO_LONG.AsInteger():
        desc = "Certificate path too long";
        break;
    case CHIP_ERROR_CERT_USAGE_NOT_ALLOWED.AsInteger():
        desc = "Requested certificate usage is not allowed";
        break;
    case CHIP_ERROR_CERT_EXPIRED.AsInteger():
        desc = "Certificate expired";
        break;
    case CHIP_ERROR_CERT_NOT_VALID_YET.AsInteger():
        desc = "Certificate not yet valid";
        break;
    case CHIP_ERROR_UNSUPPORTED_CERT_FORMAT.AsInteger():
        desc = "Unsupported certificate format";
        break;
    case CHIP_ERROR_UNSUPPORTED_ELLIPTIC_CURVE.AsInteger():
        desc = "Unsupported elliptic curve";
        break;
    case CHIP_ERROR_CERT_NOT_FOUND.AsInteger():
        desc = "Certificate not found";
        break;
    case CHIP_ERROR_INVALID_CASE_PARAMETER.AsInteger():
        desc = "Invalid CASE parameter";
        break;
    case CHIP_ERROR_CERT_LOAD_FAILED.AsInteger():
        desc = "Unable to load certificate";
        break;
    case CHIP_ERROR_CERT_NOT_TRUSTED.AsInteger():
        desc = "Certificate not trusted";
        break;
    case CHIP_ERROR_WRONG_CERT_DN.AsInteger():
        desc = "Wrong certificate distinguished name";
        break;
    case CHIP_ERROR_WRONG_NODE_ID.AsInteger():
        desc = "Wrong node ID";
        break;
    case CHIP_ERROR_RETRANS_TABLE_FULL.AsInteger():
        desc = "Retransmit Table is already full";
        break;
    case CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE.AsInteger():
        desc = "Required feature not supported by this configuration";
        break;
    case CHIP_ERROR_UNSOLICITED_MSG_NO_ORIGINATOR.AsInteger():
        desc = "Unsolicited msg with originator bit clear";
        break;
    case CHIP_ERROR_INVALID_FABRIC_INDEX.AsInteger():
        desc = "Invalid Fabric Index";
        break;
    case CHIP_ERROR_TOO_MANY_CONNECTIONS.AsInteger():
        desc = "Too many connections";
        break;
    case CHIP_ERROR_SHUT_DOWN.AsInteger():
        desc = "The operation was cancelled because a shut down was initiated";
        break;
    case CHIP_ERROR_CANCELLED.AsInteger():
        desc = "The operation has been cancelled";
        break;
    case CHIP_ERROR_MESSAGE_COUNTER_EXHAUSTED.AsInteger():
        desc = "Message counter exhausted";
        break;
    case CHIP_ERROR_FABRIC_EXISTS.AsInteger():
        desc = "Trying to add a NOC for a fabric that already exists";
        break;
    case CHIP_ERROR_ENDPOINT_EXISTS.AsInteger():
        desc = "Trying to add dynamic endpoint that already exists";
        break;
    case CHIP_ERROR_WRONG_ENCRYPTION_TYPE_FROM_PEER.AsInteger():
        desc = "Wrong encryption type error code received from peer";
        break;
    case CHIP_ERROR_INVALID_KEY_ID.AsInteger():
        desc = "Invalid key identifier";
        break;
    case CHIP_ERROR_INVALID_TIME.AsInteger():
        desc = "Valid time value is not available";
        break;
    case CHIP_ERROR_SCHEMA_MISMATCH.AsInteger():
        desc = "Schema mismatch";
        break;
    case CHIP_ERROR_INVALID_INTEGER_VALUE.AsInteger():
        desc = "Invalid integer value";
        break;
    case CHIP_ERROR_BAD_REQUEST.AsInteger():
        desc = "Request cannot be processed or fulfilled";
        break;
    case CHIP_ERROR_WRONG_CERT_TYPE.AsInteger():
        desc = "Wrong certificate type";
        break;
    case CHIP_ERROR_PERSISTED_STORAGE_FAILED.AsInteger():
        desc = "Persisted storage failed";
        break;
    case CHIP_ERROR_PERSISTED_STORAGE_VALUE_NOT_FOUND.AsInteger():
        desc = "Value not found in the persisted storage";
        break;
    case CHIP_ERROR_IM_FABRIC_DELETED.AsInteger():
        desc = "The fabric is deleted, and the corresponding IM resources are released";
        break;
    case CHIP_ERROR_IN_PROGRESS.AsInteger():
        desc = "The operation is still in progress";
        break;
    case CHIP_ERROR_ACCESS_DENIED.AsInteger():
        desc = "The CHIP message is not granted access";
        break;
    case CHIP_ERROR_UNKNOWN_RESOURCE_ID.AsInteger():
        desc = "Unknown resource ID";
        break;
    case CHIP_ERROR_VERSION_MISMATCH.AsInteger():
        desc = "Version mismatch";
        break;
    case CHIP_EVENT_ID_FOUND.AsInteger():
        desc = "Event ID matching criteria was found";
        break;
    case CHIP_ERROR_INTERNAL.AsInteger():
        desc = "Internal error";
        break;
    case CHIP_ERROR_OPEN_FAILED.AsInteger():
        desc = "Open file failed";
        break;
    case CHIP_ERROR_READ_FAILED.AsInteger():
        desc = "Read from file failed";
        break;
    case CHIP_ERROR_WRITE_FAILED.AsInteger():
        desc = "Write to file failed";
        break;
    case CHIP_ERROR_DECODE_FAILED.AsInteger():
        desc = "Decoding failed";
        break;
    case CHIP_ERROR_MDNS_COLLISION.AsInteger():
        desc = "mDNS collision";
        break;
    case CHIP_ERROR_IM_MALFORMED_ATTRIBUTE_PATH_IB.AsInteger():
        desc = "Malformed Interacton Model Attribute Path IB";
        break;
    case CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB.AsInteger():
        desc = "Malformed Interacton Model Event Path IB";
        break;
    case CHIP_ERROR_IM_MALFORMED_EVENT_DATA_IB.AsInteger():
        desc = "Malformed Interacton Model Event Data IB";
        break;
    case CHIP_ERROR_PEER_NODE_NOT_FOUND.AsInteger():
        desc = "Unable to find the peer node";
        break;
    case CHIP_ERROR_HSM.AsInteger():
        desc = "Hardware security module";
        break;
    case CHIP_ERROR_REAL_TIME_NOT_SYNCED.AsInteger():
        desc = "Real time not synchronized";
        break;
    case CHIP_ERROR_UNEXPECTED_EVENT.AsInteger():
        desc = "Unexpected event";
        break;
    case CHIP_ERROR_ENDPOINT_POOL_FULL.AsInteger():
        desc = "Endpoint pool full";
        break;
    case CHIP_ERROR_INBOUND_MESSAGE_TOO_BIG.AsInteger():
        desc = "Inbound message too big";
        break;
    case CHIP_ERROR_OUTBOUND_MESSAGE_TOO_BIG.AsInteger():
        desc = "Outbound message too big";
        break;
    case CHIP_ERROR_DUPLICATE_MESSAGE_RECEIVED.AsInteger():
        desc = "Duplicate message received";
        break;
    case CHIP_ERROR_INVALID_PUBLIC_KEY.AsInteger():
        desc = "Invalid public key";
        break;
    case CHIP_ERROR_FABRIC_MISMATCH_ON_ICA.AsInteger():
        desc = "Fabric mismatch on ICA";
        break;
    case CHIP_ERROR_NO_SHARED_TRUSTED_ROOT.AsInteger():
        desc = "No shared trusted root";
        break;
    case CHIP_ERROR_IM_STATUS_CODE_RECEIVED.AsInteger():
        desc = "Interaction Model Error";
        break;
    case CHIP_ERROR_IM_MALFORMED_DATA_VERSION_FILTER_IB.AsInteger():
        desc = "Malformed Interaction Model Data Version Filter IB";
        break;
    case CHIP_ERROR_NOT_FOUND.AsInteger():
        desc = "The item referenced in the function call was not found";
        break;
    case CHIP_ERROR_INVALID_FILE_IDENTIFIER.AsInteger():
        desc = "The file identifier, encoded in the first few bytes of a processed file, has unexpected value";
        break;
    case CHIP_ERROR_BUSY.AsInteger():
        desc = "The Resource is busy and cannot process the request";
        break;
    case CHIP_ERROR_MAX_RETRY_EXCEEDED.AsInteger():
        desc = "The maximum retry limit has been exceeded";
        break;
    case CHIP_ERROR_PROVIDER_LIST_EXHAUSTED.AsInteger():
        desc = "The provider list has been exhausted";
        break;
    case CHIP_ERROR_INVALID_SCHEME_PREFIX.AsInteger():
        desc = "The scheme field contains an invalid prefix";
        break;
    case CHIP_ERROR_MISSING_URI_SEPARATOR.AsInteger():
        desc = "The URI separator is missing";
        break;
    case CHIP_ERROR_HANDLER_NOT_SET.AsInteger():
        desc = "Callback function or callable object is not set";
        break;
    }
#endif // !CHIP_CONFIG_SHORT_ERROR_STR

    FormatError(buf, bufSize, "CHIP", err, desc);

    return true;
}

} // namespace chip
