#include <memory>

#include "absl/base/log_severity.h"
#include "absl/flags/declare.h"
#include "absl/flags/flag.h"
#include "absl/flags/parse.h"
#include "absl/log/globals.h"
#include "absl/time/time.h"
#include "tlbmc/pacemaker/pacemaker.h"
#include "tlbmc/redfish/app.h"
#include "server.h"

ABSL_DECLARE_FLAG(int, stderrthreshold);
ABSL_DECLARE_FLAG(int, minloglevel);
ABSL_FLAG(int, port, 2998, "The port to listen on.");
ABSL_FLAG(absl::Duration, pacemaker_interval, absl::Minutes(5),
          "The interval between pacemaker checks.");

int main(int argc, char* argv[]) {
  absl::ParseCommandLine(argc, argv);
  absl::SetMinLogLevel(
      static_cast<absl::LogSeverityAtLeast>(absl::GetFlag(FLAGS_minloglevel)));
  absl::SetStderrThreshold(static_cast<absl::LogSeverityAtLeast>(
      absl::GetFlag(FLAGS_stderrthreshold)));

  auto app = std::make_unique<milotic_tlbmc::RedfishApp>(
      milotic_tlbmc::Pacemaker::Create(
          absl::GetFlag(FLAGS_pacemaker_interval),
          std::make_unique<milotic_tlbmc::ShellCommandExecutor>()));

  // TODO(rahulkpr): Add routes for pacemaker.

  milotic::RedfishServiceConfig service_config{
      .port = absl::GetFlag(FLAGS_port),
      .enable_pacemaker = true,
  };
  milotic::GrpcRedfishService grpc_service(*app, service_config);
  grpc_service.Wait();
  return 0;
}
