// Copyright 2020 The Chromium OS 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 <string>
#include <vector>

#include <base/command_line.h>
#include <base/logging.h>
#include <base/task/single_thread_task_executor.h>

#include <brillo/flag_helper.h>
#include <brillo/syslog_logging.h>

#include "croslog/config.h"
#include "croslog/viewer_journal.h"
#include "croslog/viewer_plaintext.h"

int main(int argc, char* argv[]) {
  // The following method defines the command line arguments and initializes
  // the brillo's command line parser. See the code for detail.
  croslog::Config config;
  bool parse_result = config.ParseCommandLineArgs(argc, argv);

  // The method above (|croslog::Config::ParseCommandLineArgs|) initializes the
  // command line, so this code needs to be placed after that.
  base::CommandLine* const command_line =
      base::CommandLine::ForCurrentProcess();

  if (!parse_result) {
    command_line->AppendSwitch("help");
    // Calling this method shows the command line usage.
    brillo::FlagHelper::GetInstance()->UpdateFlagValues();
    return 1;
  }

  // Configure the log destination. This should be placed before any code which
  // potentially write logs.
  int log_flags = brillo::kLogToStderr;
  // if the stdin is not tty, send logs to syslog as well.
  if (!isatty(0) || command_line->HasSwitch("send-syslog"))
    log_flags |= brillo::kLogToSyslog;
  brillo::InitLog(log_flags);

  switch (config.source) {
    case croslog::SourceMode::JOURNAL_LOG:
      croslog::ViewerJournal viewer;
      return viewer.Run(config) ? 0 : 1;
    case croslog::SourceMode::PLAINTEXT_LOG: {
      // Do not use them directly.
      base::SingleThreadTaskExecutor task_executor(base::MessagePumpType::IO);
      base::AtExitManager at_exit_manager_;

      // TODO(yoshiki): Implement the reader of plaintext logs.
      croslog::ViewerPlaintext viewer(config);
      return viewer.Run() ? 0 : 1;
    }
  }
}
