// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <getopt.h>

#include <iostream>
#include <string>

#include "gtest/gtest.h"

// The test main must toggle logging and trace logging features because
// tests will be run in environments that support them (in which case we
// want as much debugging information as possible), and environments that
// don't, so they must be disabled. If ENABLE_PLATFORM_IMPL and
// ENABLE_TRACE_LOGGING are both false, then we should no Open Screen
// dependencies.
#ifdef ENABLE_PLATFORM_IMPL
#include "platform/impl/logging.h"
#endif
#ifdef ENABLE_TRACE_LOGGING
#include "platform/impl/text_trace_logging_platform.h"
#endif

namespace {
void LogUsage(const char* argv0) {
  std::cerr << R"(
usage: )" << argv0
            << R"( <options>

options:
  -t, --tracing: Enable performance tracing logging.

  -v, --verbose: Enable verbose logging.

  -h, --help: Show this help message.
)";
}

struct GlobalTestState {
#ifdef ENABLE_TRACE_LOGGING
  std::unique_ptr<openscreen::TextTraceLoggingPlatform> trace_logger;
#endif
  bool args_are_valid = false;
};

GlobalTestState InitFromArgs(int argc, char** argv) {
  // A note about modifying command line arguments: consider uniformity
  // between all Open Screen executables. If it is a platform feature
  // being exposed, consider if it applies to the standalone receiver,
  // standalone sender, osp demo, and test_main argument options.
  const struct option kArgumentOptions[] = {
      {"tracing", no_argument, nullptr, 't'},
      {"verbose", no_argument, nullptr, 'v'},
      {"help", no_argument, nullptr, 'h'},
      {nullptr, 0, nullptr, 0}};

  GlobalTestState state;
  int ch = -1;
  while ((ch = getopt_long(argc, argv, "tvh", kArgumentOptions, nullptr)) !=
         -1) {
    switch (ch) {
#ifdef ENABLE_TRACE_LOGGING
      case 't':
        state.trace_logger =
            std::make_unique<openscreen::TextTraceLoggingPlatform>();
        break;
#endif
// When not built with Chrome, log level default is warning. When we are built
// with Chrome, we have no way of knowing or setting log level.
#ifdef ENABLE_PLATFORM_IMPL
      case 'v':
        openscreen::SetLogLevel(openscreen::LogLevel::kVerbose);
        break;
#endif
      case 'h':
        LogUsage(argv[0]);
        return state;
    }
  }

  state.args_are_valid = true;
  return state;
}
}  // namespace

// Googletest strongly recommends that we roll our own main
// function if we want to do global test environment setup.
// See the below link for more info;
// https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#sharing-resources-between-tests-in-the-same-test-case
//
// This main method is a drop-in replacement for anywhere that currently
// depends on gtest_main, meaning it can be linked into any test-only binary
// to provide a main implementation that supports setting flags and other
// state that we want shared between all tests.
int main(int argc, char** argv) {
  auto state = InitFromArgs(argc, argv);
  if (!state.args_are_valid) {
    return 1;
  }

  testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}
