// Copyright 2018 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 MODEMFWD_JOURNAL_H_
#define MODEMFWD_JOURNAL_H_

#include <memory>
#include <string>

#include <base/files/file_path.h>

#include "modemfwd/firmware_directory.h"
#include "modemfwd/modem_helper_directory.h"

namespace modemfwd {

class Journal {
 public:
  virtual ~Journal() = default;

  // We keep track of device id and possibly carrier id here instead of the
  // file path to handle the following case:
  // * The device loses power.
  // * When we come back up, a newer version of the component is loaded.
  // The file path to the relevant firmware has now changed, so we need to
  // be able to load from the new location.
  virtual void MarkStartOfFlashingMainFirmware(
      const std::string& device_id, const std::string& carrier_id) = 0;
  virtual void MarkEndOfFlashingMainFirmware(const std::string& device_id,
                                             const std::string& carrier_id) = 0;

  virtual void MarkStartOfFlashingCarrierFirmware(
      const std::string& device_id, const std::string& carrier_id) = 0;
  virtual void MarkEndOfFlashingCarrierFirmware(
      const std::string& device_id, const std::string& carrier_id) = 0;
};

// Opens the journal at |journal_path|. If there was an operation in
// progress, that operation is restarted before the journal is returned.
std::unique_ptr<Journal> OpenJournal(const base::FilePath& journal_path,
                                     FirmwareDirectory* firmware_dir,
                                     ModemHelperDirectory* helper_dir);

}  // namespace modemfwd

#endif  // MODEMFWD_JOURNAL_H_
