/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *    All rights reserved.
 *
 *    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.
 */

#import <Matter/MTRDefines.h>

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSInteger, MTRLogType) {
    MTRLogTypeError = 1,
    MTRLogTypeProgress = 2,
    MTRLogTypeDetail = 3,
};

typedef void (^MTRLogCallback)(MTRLogType type, NSString * moduleName, NSString * message);

/**
 * Arranges for log messages from the Matter stack to be delivered to a callback block.
 *
 * @param logTypeThreshold only messages up to (and including) the specified log type will be delivered
 * @param callback the block to call, or nil to disable the log callback.
 *
 * The callback block may be called concurrently and/or from arbitrary threads.
 * It SHALL NOT call back directly or indirectly into any Matter APIs,
 * nor block the calling thread for a non-trivial amount of time.
 */
MTR_EXTERN MTR_NEWLY_AVAILABLE void MTRSetLogCallback(MTRLogType logTypeThreshold, MTRLogCallback _Nullable callback);

NS_ASSUME_NONNULL_END
