// 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_
