// Copyright 2020 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

// Replaces log levels and flag presence indicator with emoji.
#ifndef PW_EMOJI
#define PW_EMOJI 0
#endif  // PW_EMOJI

// With all the following flags enabled except for the optional user provided
// PW_LOG_APPEND_TIMESTAMP, log messages look like this:
//
// clang-format off
//  my_file.cc                    :  42 |                Foo | TST | INF  Hello, world!
//  buggy.cc                      :2145 |    ReadBuggyBuffer |     * ERR  No, BAD!
//
// With emoji:
//  my_file.cc                    :  42 |                Foo | TST    ℹ️  Hello, world!
//  buggy.cc                      :2145 |    ReadBuggyBuffer |     🚩 ❌  No, BAD!
// clang-format on

// Prints the name of the file that emitted the log message.
#ifndef PW_LOG_SHOW_FILENAME
#define PW_LOG_SHOW_FILENAME 0
#endif  // PW_LOG_SHOW_FILENAME

// Prints the name of the function that emitted the log message.
#ifndef PW_LOG_SHOW_FUNCTION
#define PW_LOG_SHOW_FUNCTION 0
#endif  // PW_LOG_SHOW_FUNCTION

// Prints an indicator for whether or not there are any active flags for a given
// log statement.
#ifndef PW_LOG_SHOW_FLAG
#define PW_LOG_SHOW_FLAG 0
#endif  // PW_LOG_SHOW_FLAG

// Prints the module name associated with a log statement. This is provided by
// defining PW_LOG_MODULE_NAME inside module source files, it is not implied by
// module structure or file path magic.
#ifndef PW_LOG_SHOW_MODULE
#define PW_LOG_SHOW_MODULE 0
#endif  // PW_LOG_SHOW_MODULE

// Optional user provided macro to append a prefixing timestamp string.
// For example this could be implemented as:
// #define PW_LOG_APPEND_TIMESTAMP(buffer) AppendSecSinceEpoch(buffer)
//
// void AppendSecSinceEpoch(pw::StringBuilder& builder) {
//    const std::chrono::duration<float> float_s_since_epoch =
//        pw::chrono::SystemClock::now().time_since_epoch();
//    builder << float_s_since_epoch.count() << " ";
// }
#ifndef PW_LOG_APPEND_TIMESTAMP
#define PW_LOG_APPEND_TIMESTAMP(buffer) \
  do {                                  \
  } while (0)
#endif  // PW_LOG_APPEND_TIMESTAMP
