// Copyright 2021 The Pigweed Authors
//
// 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
//
//     https://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.
#pragma once

#include "pw_preprocessor/arguments.h"
#include "pw_preprocessor/compiler.h"
#include "pw_preprocessor/util.h"

PW_EXTERN_C_START

// Log a message with the listed attributes.
void pw_LogSink_Log(int level,
                    unsigned int flags,
                    const char* module_name,
                    const char* file_name,
                    int line_number,
                    const char* function_name,
                    const char* message,
                    ...) PW_PRINTF_FORMAT(7, 8);

PW_EXTERN_C_END

// Log a message with many attributes included.
//
// This is the log macro frontend that funnels everything into the C handler
// above, pw_LogSink_Log(). It's not efficient at the callsite, since it passes
// many arguments. Additionally, the use of the __FUNC__ macro adds a static
// const char[] variable inside functions with a log.
//
// TODO(pwbug/87): Reconsider the naming of this module when more is in place.
#define PW_HANDLE_LOG(level, flags, message, ...)       \
  do {                                                  \
    pw_LogSink_Log((level),                             \
                   (flags),                             \
                   PW_LOG_MODULE_NAME,                  \
                   __FILE__,                            \
                   __LINE__,                            \
                   __func__,                            \
                   message PW_COMMA_ARGS(__VA_ARGS__)); \
  } while (0)

#ifdef __cplusplus

#include <string_view>

#include "pw_bytes/span.h"
#include "pw_log_sink/sink.h"

namespace pw::log_sink {

// Adds sink interface to list of sinks to push messages to.
void AddSink(Sink& sink);

// Removes sink interface from list of sinks to push messages to.
void RemoveSink(Sink& sink);

}  // namespace pw::log_sink

#endif  // __cplusplus
