// Copyright 2021 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 <brillo/daemons/daemon.h>
#include <brillo/flag_helper.h>
#include <brillo/message_loops/message_loop.h>
#include <brillo/syslog_logging.h>

#include <fcntl.h>
#include <memory>
#include <stdlib.h>
#include <sysexits.h>

#include "chromeos/dbus/service_constants.h"
#include "dbus/bus.h"
#include "dbus/exported_object.h"
#include "dbus/message.h"
#include "dbus/object_proxy.h"
#include "featured/service.h"

namespace {
class FeatureDaemon : public brillo::Daemon {
 public:
  FeatureDaemon() = default;
  FeatureDaemon(const FeatureDaemon&) = delete;
  FeatureDaemon& operator=(const FeatureDaemon&) = delete;
};
}  // namespace

int main(int argc, char** argv) {
  base::CommandLine::Init(argc, argv);

  brillo::InitLog(brillo::kLogToSyslog | brillo::kLogToStderr);

  dbus::Bus::Options options;
  options.bus_type = dbus::Bus::SYSTEM;
  scoped_refptr<dbus::Bus> bus = new dbus::Bus(options);
  std::shared_ptr<featured::DbusFeaturedService> service =
      std::make_shared<featured::DbusFeaturedService>();

  CHECK(service->Start(bus.get(), service)) << "Failed to start featured!";

  FeatureDaemon daemon;
  int rc = daemon.Run();
  return rc == EX_UNAVAILABLE ? EX_OK : rc;
}
