// Copyright 2017 The Fuchsia 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 PERIDOT_BIN_SESSIONMGR_MESSAGE_QUEUE_PERSISTENT_QUEUE_H_
#define PERIDOT_BIN_SESSIONMGR_MESSAGE_QUEUE_PERSISTENT_QUEUE_H_

#include <deque>
#include <string>

#include <src/lib/fxl/logging.h>

namespace modular {

/* Implements a FIFO queue of strings that is persisted to local storage as
 * JSON. It is not safe to use from multiple processes or threads. If writing
 * the queue JSON to disk fails an error will be logged but calls will not fail.
 */
class PersistentQueue {
 public:
  explicit PersistentQueue(std::string file_name);
  bool IsEmpty() const { return queue_.empty(); }

  std::string Peek() const {
    FXL_DCHECK(!queue_.empty());
    return queue_.front();
  }

  std::string Dequeue() {
    std::string value = queue_.front();
    queue_.pop_front();
    Save();
    return value;
  }

  void Enqueue(const std::string& value) {
    queue_.push_back(value);
    Save();
  }

 private:
  std::string file_name_;
  std::deque<std::string> queue_;

  void Save();
};

}  // namespace modular

#endif  // PERIDOT_BIN_SESSIONMGR_MESSAGE_QUEUE_PERSISTENT_QUEUE_H_
