/**
 * Copyright (c) 2026 Tencent. All rights reserved.
 * Module:   TXVoiceAILog @ TXLiteAVSDK
 */

#pragma once

#include <cstdint>

#ifndef LITEAVSDK_API
#if defined(_WIN32)
#ifdef LITEAV_EXPORTS
#define LITEAVSDK_API __declspec(dllexport)
#else
#define LITEAVSDK_API __declspec(dllimport)
#endif
#else
#define LITEAVSDK_API __attribute__((visibility("default")))
#endif
#endif  /// LITEAVSDK_API

namespace liteav {

/// VoiceAI 日志级别。
enum class TXVoiceAILogLevel {
  /// 输出所有级别的 Log。
  kVerbose = 0,

  /// 输出 DEBUG，INFO，WARNING，ERROR 和 FATAL 级别的 Log。
  kDebug = 1,

  /// 输出 INFO，WARNING，ERROR 和 FATAL 级别的 Log。
  kInfo = 2,

  /// 输出 WARNING，ERROR 和 FATAL 级别的 Log。
  kWarn = 3,

  /// 输出 ERROR 和 FATAL 级别的 Log。
  kError = 4,

  /// 仅输出 FATAL 级别的 Log。
  kFatal = 5,

  /// 不输出任何 SDK Log。
  kNone = 6,
};

/// VoiceAI 日志回调接口。
class ITXVoiceAILogCallback {
 public:
  virtual ~ITXVoiceAILogCallback() = default;

  /// 本地 LOG 的打印回调。
  /// 如果您希望捕获 SDK 的本地日志打印行为，可以通过 setLogCallback 设置回调，
  /// 让 SDK 将要打印的日志都通过本回调接口抛送给您。
  /// @param log   日志内容。
  /// @param level 日志等级，参见 TXVoiceAILogLevel。
  virtual void onLog(const char* log, TXVoiceAILogLevel level) {}
};

/// VoiceAI 日志配置接口（静态方法）。
class TXVoiceAILog {
 public:
  /// 设置 Log 输出级别。
  /// @param level 参见 TXVoiceAILogLevel，默认值：kNone。
  static LITEAVSDK_API void setLogLevel(TXVoiceAILogLevel level);

  /// 设置日志存储路径。
  /// @note 请务必在所有其他接口之前调用，并且保证您指定的目录是存在且可写的。
  /// @param path 存储日志的路径。
  static LITEAVSDK_API void setLogPath(const char* path);

  /// 设置日志回调。
  /// @param callback 日志回调接口（传 nullptr 可取消回调）。
  static LITEAVSDK_API void setLogCallback(ITXVoiceAILogCallback* callback);
};

}  // namespace liteav
