// Copyright (c) 2010 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 <memory>

#include <base/command_line.h>
#include <base/files/file_path.h>
#include <base/logging.h>

#include "image-burner/image_burner.h"
#include "image-burner/image_burner_impl.h"
#include "image-burner/image_burner_utils.h"

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

  logging::LoggingSettings settings;
  settings.logging_dest = logging::LOG_TO_ALL;
  settings.log_file = FILE_PATH_LITERAL("/var/log/image_burner.log");
  settings.lock_log = logging::LOCK_LOG_FILE;
  settings.delete_old = logging::DELETE_OLD_LOG_FILE;
  logging::InitLogging(settings);

  imageburn::BurnWriter writer;
  imageburn::BurnReader reader;
  imageburn::BurnPathGetter path_getter;
  std::unique_ptr<imageburn::BurnerImpl> burner(
      new imageburn::BurnerImpl(&writer, &reader, NULL, &path_getter));

  imageburn::ImageBurnService service(burner.get());
  service.Initialize();
  burner->InitSignalSender(&service);

  service.Register(brillo::dbus::GetSystemBusConnection());
  service.Run();
  return 0;
}
