/*
 * Copyright (c) Qualcomm Innovation Center, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree.
 */
#include <executorch/backends/qualcomm/runtime/Logging.h>
#include <cstdarg>
#include <cstdio>
#ifdef __ANDROID__
#include <android/log.h>
#endif
namespace executorch {
namespace backends {
namespace qnn {
void Log(QnnExecuTorchLogLevel log_level, const char* format, ...) {
  va_list args;
  va_start(args, format);
  const char* serverity_name;
  switch (log_level) {
    case QnnExecuTorchLogLevel::kLogLevelVerbose:
      serverity_name = "VERBOSE";
      break;
    case QnnExecuTorchLogLevel::kLogLevelInfo:
      serverity_name = "INFO";
      break;
    case QnnExecuTorchLogLevel::kLogLevelWarn:
      serverity_name = "WARNING";
      break;
    case QnnExecuTorchLogLevel::kLogLevelError:
      serverity_name = "ERROR";
      break;
    case QnnExecuTorchLogLevel::kLogLevelDebug:
      serverity_name = "DEBUG";
      break;
    default:
      serverity_name = "Unknown severity";
      break;
  }
#ifdef __ANDROID__
  int android_severity = ANDROID_LOG_DEBUG;
  switch (log_level) {
    case QnnExecuTorchLogLevel::kLogLevelInfo:
      android_severity = ANDROID_LOG_INFO;
      break;
    case QnnExecuTorchLogLevel::kLogLevelWarn:
      android_severity = ANDROID_LOG_WARN;
      break;
    case QnnExecuTorchLogLevel::kLogLevelError:
      android_severity = ANDROID_LOG_ERROR;
      break;
    case QnnExecuTorchLogLevel::kLogLevelVerbose:
    case QnnExecuTorchLogLevel::kLogLevelDebug:
    default:
      android_severity = ANDROID_LOG_DEBUG;
      break;
  }
  __android_log_vprint(android_severity, "[Qnn ExecuTorch]", format, args);
#endif
  fprintf(stderr, "[%s] [Qnn ExecuTorch]: ", serverity_name);
  vfprintf(stderr, format, args);
  va_end(args);
  fputc('\n', stderr);
}
} // namespace qnn
} // namespace backends
} // namespace executorch
