/*
 * Copyright 2023 The Android Open Source Project
 *
 * 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
 *
 *      http://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.
 */

#include <cstdint>
#include <cstdlib>
#include <iostream>
#include <string>

#include <android-base/logging.h>
#include <gflags/gflags.h>

#include "cuttlefish/common/libs/utils/result.h"
#include "cuttlefish/host/libs/metrics/metrics_receiver.h"

namespace cuttlefish {
namespace {

Result<void> MetricsLauncherMain() {
  while (true) {
    std::cout << "Please choose an action: \n";
    std::cout << "  start - send start event to cuttlefish metrics client \n";
    std::cout << "  stop - send stop event to cuttlefish metrics client \n";
    std::cout << "  boot - send boot event to cuttlefish metrics client\n";
    std::cout << "  lock - send lock event to cuttlefish metrics client\n";
    std::cout << "  atest - send launch command to atest metrics client \n";
    std::cout << "  exit - exit the program \n";

    std::string command;
    std::getline(std::cin, command);

    if (command == "start") {
      cuttlefish::MetricsReceiver::LogMetricsVMStart();
    } else if (command == "stop") {
      cuttlefish::MetricsReceiver::LogMetricsVMStop();
    } else if (command == "boot") {
      cuttlefish::MetricsReceiver::LogMetricsDeviceBoot();
    } else if (command == "lock") {
      cuttlefish::MetricsReceiver::LogMetricsLockScreen();
    } else if (command == "exit") {
      break;
    } else {
      LOG(ERROR) << "Unknown command: " << command;
    }
  }
  return {};
}

}  // namespace
}  // namespace cuttlefish

int main(int argc, char** argv) {
  ::android::base::InitLogging(argv, android::base::StderrLogger);
  google::ParseCommandLineFlags(&argc, &argv, true);

  cuttlefish::Result<void> result = cuttlefish::MetricsLauncherMain();
  if (!result.ok()) {
    LOG(ERROR) << result.error().FormatForEnv();
    return EXIT_FAILURE;
  }
  return EXIT_SUCCESS;
}
