// Copyright (c) 2011 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.

#ifndef IMAGE_BURNER_IMAGE_BURNER_UTILS_INTERFACES_H_
#define IMAGE_BURNER_IMAGE_BURNER_UTILS_INTERFACES_H_

#include <stdint.h>

#include <string>

namespace imageburn {

class FileSystemWriter {
 public:
  virtual ~FileSystemWriter() {}
  virtual int Write(const char* data_block, int data_size) = 0;
  virtual bool Open(const char* path) = 0;
  virtual bool Close() = 0;
};

class FileSystemReader {
 public:
  virtual ~FileSystemReader() {}
  virtual bool Open(const char* path) = 0;
  virtual bool Close() = 0;
  virtual int Read(char* data_block, int data_size) = 0;
  virtual int64_t GetSize() = 0;
};

class PathGetter {
 public:
  virtual ~PathGetter() {}
  virtual bool GetRealPath(const char* path, std::string* real_path) = 0;
  virtual bool GetRootPath(std::string* path) = 0;
};

class SignalSender {
 public:
  virtual ~SignalSender() {}
  virtual void SendFinishedSignal(const char* target_path,
                                  bool success,
                                  const char* error_message) = 0;
  virtual void SendProgressSignal(int64_t amount_burnt,
                                  int64_t total_size,
                                  const char* target_path) = 0;
};

}  // namespace imageburn

#endif  // IMAGE_BURNER_IMAGE_BURNER_UTILS_INTERFACES_H_
